最近需要用到加密这块,然后记录一下常用的加密,方便以后使用的时候,不要手忙脚乱的查找。
DES:数据加密标准,密钥偏短(56位)、生命周期短(避免被破解)。
3DES:密钥长度112位或168位,通过增加迭代次数提高安全性 。处理速度慢、密钥计算时间长、加密效率不高 。
AES:高级数据加密标准,能够有效抵御已知的针对DES算法的所有攻击 。密钥建立时间短、灵敏性好、内存需求低、安全性高 。
具体实现:
生成密钥
try {
//密钥生成器
KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");
//初始化密钥长度
keyGenerator.init(56);
//生成密钥
SecretKey secretKey = keyGenerator.generateKey();
//密钥生成数组
byte[] key = secretKey.getEncoded();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
}
加密
//恢复密钥
SecretKey secretKey = new SecretKeySpec(key, "DES");
try {
//Cipher 工具类
Cipher cipher = Cipher.getInstance("DES");
//初始化模式
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
//加密 data加密内容
byte[] cipherByte = cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
解密:
//恢复密钥
SecretKey secretKey = new SecretKeySpec(key, "DES");
try {
//Cipher 工具类
Cipher cipher = Cipher.getInstance("DES");
//初始化模式
cipher.init(Cipher.DECRYPT_MODE, secretKey);
//加密 data加密内容
byte[] cipherByte = cipher.doFinal(data);
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
}
DES、3DES、AES三种加密方式大致一致,只是在进行加解密时,放置不同的类型,具体如下:
- DES 类型 DES
- 3DES 类型 DESede
- AES 类型 AES
加密和解密用法一致,根据Cipher常量来区分。
- ENCRYPT_MODE 加密常量
- DECRYPT_MODE 解密常量
- WRAP_MODE 包装常量
- UNWRAP_MODE 密钥解包常量
- PUBLIC_KEY 解包“公钥"常量
- PRIVATE_KEY 解包”私钥“常量
- SECRET_KEY 秘密密钥常量
MD5
加密:
//确定计算方法
MessageDigest md5=MessageDigest.getInstance("MD5");
BASE64Encoder base64en = new BASE64Encoder();
//加密后的字符串
String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
BASE64Encoder base64en = new BASE64Encoder();
//加密后的字符串
String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));
String newstr=base64en.encode(md5.digest(str.getBytes("utf-8")));