常见加密算法
常见的加密算法可以分成三类,对称加密算法,非对称加密算法和Hash算法。
非对称加密算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey)。公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密;如果用私有密钥对数据进行加密,那么只有用对应的公开密钥才能解密。因为加密和解密使用的是两个不同的密钥,所以这种算法叫作非对称加密算法。
常见的非对称算法包括了:RSA、Elgamal等算法。
RSA算法
RSA是目前最有影响力的公钥加密算法,该算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但那时想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥,即公钥,而两个大素数组合成私钥。公钥是可发布的供任何人使用,私钥则为自己所有,供解密之用。
过程:
- 随意选择两个大的质数p和q,p不等于q,计算N=pq。
- 根据欧拉函数,不大于N且与N互质的整数個数為(p-1)(q-1)。
- 选择一个整数e与(p-1)(q-1)互质,并且e小于(p-1)(q-1)。
- 用以下这个公式计算d:d× e ≡ 1 (mod (p-1)(q-1))。
- 将p和q的记录销毁。
(N,e)是公钥,(N,d)是私钥。
JAVA实现
public class RSAUtils {
public static final String CHARSET = "UTF-8";
public static final String RSA_ALGORITHM = "RSA";
public static Map<String, String> createKeys(int keySize){
//为RSA算法创建一个KeyPairGenerator对象
KeyPairGenerator kpg;
try{
kpg = KeyPairGenerator.getInstance(RSA_ALGORITHM);
}