为什么需要加密:相信一下,如果信用卡的信息直接明文在互联网上传播,会发生什么?比如你和那个女孩子的聊天艾米信息被传到了你女朋友哪里,会发生什么?
加密成了每个程序员需要掌握的必要技能,也是一个“不作恶”程序员的基本
加密算法分为:对称加密和非对称加密,以及hash加密
简单说两者之间的区别:对称加密算法的加密与解密 密匙相同;非对称加密算法的加密密匙与解密 密匙不同。
非对称加密:也称为公开密匙密码加密。需要两个密匙,一个公匙,一个私匙,一个加密,一个解密。用一个密匙加密以后得到的密文,只能用相对应的另一个密匙才能解密。加密密匙的无法用来解密。
对称加密:解密加密使用的同一套密匙。
对称加密算法速度快,非对称加密算法速度慢。可以结合两种算法一起使用,使用对称加密算法加密信息,使用非对称加密算法加密对称加密的密码,来达到安全性(简单说就是:通过RSA加密AES的密匙)
常用加密算法:
如下两种,严格来说不是算法,应该叫信息摘要算法。HASH加密
MD5算法:使用哈希函数;应用场景:对一段信息产生信息摘要,以防止篡改。
public static final byte[] computeMD5(byte[] content) {
try {
MessageDigest md5 = MessageDigest.getInstance("MD5");
return md5.digest(content);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
SHA1算法:信息摘要算法,安全性比md5更强,应用场景:检查文件完整性以及数字签名等
public static byte[] computeSHA1(byte[] content) {
try {
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
return sha1.digest(content);
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException(e);
}
}
该算法位于:java.security.MessageDigest
HMAC算法:
对称加密算法:
AES:是密码学中的最高加密标准,该加密算法采用对称分组密码体制
两个密码学的概念:扩散(diffusion)和扰乱(confusion)是影响密码安全的主要因素[5]。扩散的目的是让明文中的单个数字影响密文中的多个数字,从而使明文的统计特征在密文中消失,相当于明文的统计结构被扩散[6]。例如,最简单的方法让明文中的一个数字影响密文中的k个数字,扰乱是指让密钥与密文的统计信息之间的关系变得复杂,从而增加通过统计方法进行攻击的难度。扰乱可以通过各种代换算法实现。
DES:分组密码 ,以64位为分组对数据加密。
3DES算法:以DES算法为基础,对数据用三个不同的密匙进行三次加密
TDEA,Blowfish、RC2、RC4、RC5、IDEA、SKIPJACK
非对称加密算法:
ECC算法:非对称加密算法,更小的密匙,提供更高的安全级别,但是时间更长,CPU消耗严重。
RSA、ECC(移动设备用)、Diffie-Hellman、El Gamal、DSA(数字签名用)。
算法相关概念:
时间复杂度:指算法需要消耗的时间资源
控件复杂度:指算法需要消耗的空间资源
AES和RSA算法
RSA算法理解:
非对称加密算法
AES算法理解
对称加密算法,
参考: