如何将String转换为私钥?

时间:2018-04-03 06:30:23

标签: java android cryptography rsa

我正在尝试将存储在SharedPreferences中的字符串转换为PrivateKey,但我无法将其转换为此字段。

这就是我将PrivateKey转换为String的方式,

kpg = KeyPairGenerator.getInstance("RSA");
kpg.initialize(1024);
kp = kpg.genKeyPair();
publicKey = kp.getPublic();
privateKey = kp.getPrivate();

byte[] privateKeyBytes = publicKey.getEncoded();
String privKeyStr = new String(Base64.encode(privateKeyBytes));

SharedPreferences.Editor editor = getPrefs(context).edit();
editor.putString(user + "_private_key", privKeyStr + "");
editor.commit();

这就是我尝试从SharedPreference检索密钥并将其转换回PrivateKey

的方法
String privKeyStr = getPrefs(context).getString(user + "_private_key", "no private key");
Log.d("key", privKeyStr);
byte[] sigBytes = new byte[0];
try {
    sigBytes = Base64.decode(privKeyStr.getBytes("UTF-8"));
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}
PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(sigBytes);
KeyFactory keyFact = KeyFactory.getInstance("RSA");
PrivateKey privateKey = null;

try {
    privateKey = keyFact.generatePrivate(privateKeySpec);  //throws exception
} catch (InvalidKeySpecException e) {
    e.printStackTrace();
}

这是我一直收到的错误

java.security.spec.InvalidKeySpecException: java.lang.RuntimeException: error:0c0000b9:ASN.1 encoding routines:OPENSSL_internal:WRONG_TAG

我知道之前已经提出了与此类似的问题,但它们似乎都没有解决我的问题。

请帮我知道我哪里错了。

1 个答案:

答案 0 :(得分:4)

请更改

byte[] privateKeyBytes = publicKey.getEncoded();

byte[] privateKeyBytes = privateKey.getEncoded();

其余代码似乎正确