1、加密算法简单介绍
SM1算法没有公开
不可逆加密:SHA256、SHA384、SHA512以及HMAC-SHA256、HMAC-SHA384、HMAC-SHA512、SM3(类似于md5) 哈希算法
可逆加密 SM2非对称算法、SM4对称加密算法、DES分组加密算法、3DES三重数据加密算法现已不推荐使用、RSA RSA算法、AES对称加密算法
Base64是编码方式,不算加密
加密后位数
MD5 32位 salt
SHA-256 64位 salt
SHA-1 40位 salt
HMAC-SHA-256 64位 salt+密匙
可逆加密算法加密后位数不固定,是根据明文长度递增的,一般需扩8倍,最小为32位
2、算法实现
略,网上很多
# AES加密在linux系统下加密结果不一致
KeyGenerator secretGenerator = KeyGenerator.getInstance("AES");
SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(publicKey.getBytes());
secretGenerator.init(256, secureRandom);
SecretKey secretKey = secretGenerator.generateKey();
Cipher cipher = Cipher.getInstance("AES");
cipher.init(mode, secretKey);
return cipher.doFinal(rawText);
# 错误写法
KeyGenerator secretGenerator = KeyGenerator.getInstance("AES");
secretGenerator.init(256, new SecureRandom(publicKey.getBytes()));
SecretKey secretKey = secretGenerator.generateKey();
Cipher cipher = Cipher.getInstance("AES");
cipher.init(mode, secretKey);
return cipher.doFinal(rawText);
注意:
大部分算法解密失败抛异常,比如SM4算法,但是AES算法解密失败不报异常,而是返回""