我正在尝试使用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...)。
请建议如何纠正此问题。
非常感谢。
发布于 2015-12-06 22:00:53
android IRC小组非常有帮助。
我犯了一个错误,使用toString()将字节数组转换为字符串。当我们使用toString()将字节数组(或byte[])转换为字符串时,我们打印对象的起始地址。所以实际上[B@xxxxx ]实际上是字节数组的地址( xxxx部分),而我把它们混淆为数组的实际内容。
上面建议的方法是有效的。加密和解密产生相同的数字。
https://stackoverflow.com/questions/34082142
复制相似问题