RSA算法原理
RSA算法
- 随机两个质数p,q。
- n = p * q,n的值就是模(modulu),n的二进制位数就是秘钥长度,一般是1024/2048。
- 指数e(exponent)在(1,(p-1)(q-1))之间,随机一个整数,且与(p-1)(q-1)互质,一般是65537。
- 计算e对于(p-1)(q-1)的模反元素d,即整数d使得
(e * d) mod (p-1)(q-1) = 1
- 公钥就是(n, e),私钥就是(n, d)。
JAVA实现
public static Map<String, Object> genKeyPair() throws Exception {
KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
keyPairGen.initialize(1024);
KeyPair keyPair = keyPairGen.generateKeyPair();
RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
Map<String, Object> keyMap = new HashMap<String, Object>(2);
keyMap.put(PUBLIC_KEY, publicKey);
keyMap.put(PRIVATE_KEY, privateKey);
return keyMap;
}
public static String getPrivateKey(Map<String, Object> keyMap) throws Exception {
Key key = (Key) keyMap.get(PRIVATE_KEY);
return encryptBASE64(key.getEncoded());
}
public static String getPublicKey(Map<String, Object> keyMap) throws Exception {
Key key = (Key) keyMap.get(PUBLIC_KEY);
return encryptBASE64(key.getEncoded());
}
KeyPairGenerator类