`
yaodaqing
  • 浏览: 345367 次
  • 性别: Icon_minigender_1
  • 来自: 苏州
社区版块
存档分类
最新评论

JAVA和C通讯的AES加密和解密,供参考

阅读更多
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;
	}
}

分享到:
评论
3 楼 缘来是你 2016-02-01  
同求C源码
2 楼 ioandy 2016-01-05  
同求C源码,757455159@qq.com
1 楼 ninthbar 2012-05-23  
最近项目也要和c系统交互,请问能否提供一下C语言的相应加解密实现代码?

相关推荐

Global site tag (gtag.js) - Google Analytics