import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
/**
* 自己做的JAVA和C通讯的AES加密和解密,供参考
* @author yaodaqing
*
*/
public class AESAndC02 {
/**
* 密钥
*/
private static final String aesKey = "0123456789abcdef";
/**
* 加密
* @param b
* @return
*/
public static byte[] encryptAES(byte[] b){
if (aesKey == null) {
System.out.print("Key为空null");
return null;
}
//判断Key是否为16位
if (aesKey.length() != 16) {
System.out.print("Key长度不是16位");
return null;
}
try {
byte[] raw = aesKey.getBytes("ASCII");
SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES");
cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
byte[] encrypted = cipher.doFinal(b);
return encrypted;
} catch (Exception e) {
System.out.println("数据加密时发生异常...");
e.printStackTrace();
}
return null;
}
/**
* 解密
* @param b
* @return
* 由于C语言在加密时采用了模式,所以JAVA在解析时需要采用模式来解密
*/
public static byte[] decryptAES(byte[] b){
//判断Key是否正确
if (aesKey == null) {
System.out.print("Key为空null");
return null;
}
//判断Key是否为16位
if (aesKey.length() != 16) {
System.out.print("Key长度不是16位");
return null;
}
try {
byte[] raw = aesKey.getBytes("ASCII");
SecretKeySpec skp = new SecretKeySpec(raw, "AES");
Cipher cipher = Cipher.getInstance("AES/ECB/NoPadding");
cipher.init(Cipher.DECRYPT_MODE, skp);
byte[] original = cipher.doFinal(b);
return original;
} catch (Exception e) {
System.out.println("数据解密时发生异常...");
e.printStackTrace();
}
return null;
}
}
分享到:
2010-12-03 11:10
浏览 7547
评论
3 楼
缘来是你
2016-02-01
同求C源码
2 楼
ioandy
2016-01-05
同求C源码,757455159@qq.com
1 楼
ninthbar
2012-05-23
最近项目也要和c系统交互,请问能否提供一下C语言的相应加解密实现代码?