android ecdsa算法,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生成公钥。

4eb0b74a4619e968344d39654cf09c7d.png

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

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

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值