首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用非对称加密(PKCS8密钥)加密安卓系统中的电话号码

使用非对称加密(PKCS8密钥)加密安卓系统中的电话号码
EN

Stack Overflow用户
提问于 2015-12-04 14:22:58
回答 1查看 259关注 0票数 0

我正在尝试使用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

加密代码:-

代码语言:javascript
复制
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);

解密码:

代码语言:javascript
复制
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...)。

请建议如何纠正此问题。

非常感谢。

EN

回答 1

Stack Overflow用户

发布于 2015-12-06 22:00:53

android IRC小组非常有帮助。

我犯了一个错误,使用toString()将字节数组转换为字符串。当我们使用toString()将字节数组(或byte[])转换为字符串时,我们打印对象的起始地址。所以实际上[B@xxxxx ]实际上是字节数组的地址( xxxx部分),而我把它们混淆为数组的实际内容。

上面建议的方法是有效的。加密和解密产生相同的数字。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34082142

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档