如何将字符串转换为私钥?
How to convert String to Private key?
我正在尝试将存储在 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
我知道之前已经有人问过类似的问题,但其中 none 似乎解决了我的问题。
请帮助我知道我哪里出错了。
请更改
byte[] privateKeyBytes = publicKey.getEncoded();
和
byte[] privateKeyBytes = privateKey.getEncoded();
其余代码似乎正确
我正在尝试将存储在 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
我知道之前已经有人问过类似的问题,但其中 none 似乎解决了我的问题。
请帮助我知道我哪里出错了。
请更改
byte[] privateKeyBytes = publicKey.getEncoded();
和
byte[] privateKeyBytes = privateKey.getEncoded();
其余代码似乎正确