【发布时间】:2015-12-04 06:22:58
【问题描述】:
我正在尝试使用 RSA 密钥通过以下步骤加密 Android 应用程序中的电话号码。加密密钥为 X509 格式,解密密钥为 PKCS8 格式。
面临的问题:加密文本和解密文本的结果不匹配。
生成密钥:-
$ openssl genrsa -out privkey.pem 2048
$ openssl rsa -in privkey.pem -pubout > pubkey.pub
将私钥转成pkcs8格式:-
$ openssl pkcs8 -topk8 -inform PEM -outform PEM -in privkey.pem -out privkey.pkcs8 -nocrypt
加密代码:-
String pubKeyPem = PUBKEY_X509.replace("-----BEGIN PUBLIC KEY-----\n", "")
.replace("-----END PUBLIC KEY-----", "");
byte [] encoded = Base64.decode(pubKeyPem, Base64.DEFAULT);
X509EncodedKeySpec keySpec = new X509EncodedKeySpec(encoded);
KeyFactory kf = KeyFactory.getInstance("RSA");
privateKey = kf.generatePrivate(keySpec);
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
... encodedNum = cipher.doFinal(phNum);
解密代码:
String privKeyPEM = PRIVATEKEY.replace("-----BEGIN PRIVATE KEY-----\n", "")
.replace("-----END PRIVATE KEY-----", "");
byte [] encoded = Base64.decode(privKeyPEM, Base64.DEFAULT);
PKCS8EncodedKeySpec keySpec = new PKCS8EncodedKeySpec(encoded);
KeyFactory kf = KeyFactory.getInstance("RSA");
privateKey = kf.generatePrivate(keySpec);
cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.DECRYPT_MODE, privateKey);
... decNum = cipher.doFinal(encNum);
我正在编码一个电话号码。编码和解码的电话号码不匹配。
算法将 0000 编码为 [B@4173bed8 .. 并将编码位解码回 [B@417412e8
我们可以看到初始数字 (0000) 与解密后的数字 ( [b41... ) 不匹配。
请就如何纠正此问题提出建议。
非常感谢。
【问题讨论】:
标签: android public-key-encryption