RSA算法以及MD5算法

RSA算法经常用于少量数据加密,具有安全性高但是速度较慢的优缺点,这是一种非对称密码算法,所谓非对称,即是指该算法加密需要一对密钥,一个密钥用于加密,一个密钥用于解密。其安全性基于大数分解的难度

RSA算法涉及到三个参数:n,e1,e2:

其中,n是两个大质数p、q的积,n的二进制表示时所占用的位数,就是所谓的密钥长度。

e1和e2是一对相关的值,e1可以任意取,但要求e1与(p-1)*(q-1)互质;再选择e2,要求(e2*e1)mod((p-1)*(q-1))=1。

(n,e1),(n,e2)就是密钥对。其中(n,e1)为公钥(n,e2)为私钥。

RSA加解密的算法完全相同,设A为明文,B为密文,则:A=B^e2 mod n;B=A^e1 mod n;(公钥加密体制中,一般用公钥加密,私钥解密)
e1和e2可以互换使用,即:
A=B^e1 mod n;B=A^e2 mod n;
RSA生成密钥对
第一种方法:代码中生成随机密钥对

/**
	 * 生成随机密钥对
	 * @param keyLength 通常为512或者1024位长度
	 * @return
	 */
	public static KeyPair generateRSAKeyPair(int keyLength) {
		try {
			KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA");
			kpg.initialize(keyLength);
			return kpg.genKeyPair();
		} catch (Exception e) {
			e.printStackTrace();
			return null;
		}
	}
	KeyPair kp = generateRSAKeyPair(1024);
	PrivateKey kp_private = kp.getPrivate();
	PublicKey kp_public = kp.getPublic();
第二种方法:通过openSSL工具生成密钥对

genrsa -out rsa_private_key.pem 1024
生成私钥

rsa -in rsa_private_key.pem -out rsa_public_key.pem -pubout
生成公钥。


RSA算法以及MD5算法_第1张图片

之后便可以在bin文件夹下用文本类应用打开查看私钥和公钥。

这样就生成了密钥,但是这种密钥对的私钥无法直接在代码中使用,要想使用它需借助RSAPrivateStructure这个类,java是不自带的。因此为了方便使用,我们需要对私钥进行PKCS#8编码,命令如下:

pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt


你可能感兴趣的:(android)