在 Android 中将字符串转换为 RSA 私钥
Convert String to RSA Private key in Android
在 Android 我使用下面的代码将字符串转换为 RSA 私钥。当我将此站点用于字符串私钥时,此代码有效
https://www.devglan.com/online-tools/rsa-encryption-decryption
但是当我使用这个网站时,我的代码不起作用。
https://8gwifi.org/RSAFunctionality?keysize=1024
我在 Android 工作室中的代码是:
public static PrivateKey stringToPrivateKey(String privateKeyString)
{
try {
if (privateKeyString.contains("-----BEGIN PRIVATE KEY-----") || privateKeyString.contains("-----END PRIVATE KEY-----"))
privateKeyString = privateKeyString.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "");
if (privateKeyString.contains("-----BEGIN RSA PRIVATE KEY-----") || privateKeyString.contains("-----END RSA PRIVATE KEY-----"))
privateKeyString = privateKeyString.replace("-----BEGIN RSA PRIVATE KEY-----", "").replace("-----END RSA PRIVATE KEY-----", "");
privateKeyString.trim();
privateKeyString = privateKeyString.replaceAll("\s+","");
privateKeyString = privateKeyString.replaceAll("\r+","");
privateKeyString = privateKeyString.replaceAll("^ | $|\n ", "");
byte[] keyBytes = Base64.decode(privateKeyString, Base64.DEFAULT);
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
return keyFactory.generatePrivate( spec);
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
e.printStackTrace();
}
}
第二个link错误在这一行
keyFactory.generatePrivate( spec);
这段代码解决了我的问题:
void dear(String publicKeyB64) throws NoSuchAlgorithmException, InvalidKeySpecException{
if (publicKeyB64.contains("-----BEGIN PUBLIC KEY-----") || publicKeyB64.contains("-----END PUBLIC KEY-----"))
publicKeyB64 = publicKeyB64.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "");
if (publicKeyB64.contains("-----BEGIN RSA PUBLIC KEY-----") || publicKeyB64.contains("-----END RSA PUBLIC KEY-----"))
publicKeyB64 = publicKeyB64.replace("-----BEGIN RSA PUBLIC KEY-----", "").replace("-----END RSA PUBLIC KEY-----", "");
// ok, you may need to use the Base64 decoder of bouncy or Android instead
try{
byte[] decoded = Base64.decode(publicKeyB64, Base64.DEFAULT);
org.bouncycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(decoded);
BigInteger modulus = pkcs1PublicKey.getModulus();
BigInteger publicExponent = pkcs1PublicKey.getPublicExponent();
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent);
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey generatedPublic = kf.generatePublic(keySpec);
uk =generatedPublic;
//uk is public variable in class and means public key
}
catch (Exception e){
Log.i("your log","errro in dear function");
}
}
这是我的图书馆:
compile "org.bouncycastle:bcprov-jdk15on:1.58"
compile "org.bouncycastle:bcpkix-jdk15on:1.58"
在 Android 我使用下面的代码将字符串转换为 RSA 私钥。当我将此站点用于字符串私钥时,此代码有效
https://www.devglan.com/online-tools/rsa-encryption-decryption
但是当我使用这个网站时,我的代码不起作用。
https://8gwifi.org/RSAFunctionality?keysize=1024
我在 Android 工作室中的代码是:
public static PrivateKey stringToPrivateKey(String privateKeyString)
{
try {
if (privateKeyString.contains("-----BEGIN PRIVATE KEY-----") || privateKeyString.contains("-----END PRIVATE KEY-----"))
privateKeyString = privateKeyString.replace("-----BEGIN PRIVATE KEY-----", "").replace("-----END PRIVATE KEY-----", "");
if (privateKeyString.contains("-----BEGIN RSA PRIVATE KEY-----") || privateKeyString.contains("-----END RSA PRIVATE KEY-----"))
privateKeyString = privateKeyString.replace("-----BEGIN RSA PRIVATE KEY-----", "").replace("-----END RSA PRIVATE KEY-----", "");
privateKeyString.trim();
privateKeyString = privateKeyString.replaceAll("\s+","");
privateKeyString = privateKeyString.replaceAll("\r+","");
privateKeyString = privateKeyString.replaceAll("^ | $|\n ", "");
byte[] keyBytes = Base64.decode(privateKeyString, Base64.DEFAULT);
PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance(RSA);
return keyFactory.generatePrivate( spec);
} catch (NoSuchAlgorithmException | InvalidKeySpecException e) {
e.printStackTrace();
}
}
第二个link错误在这一行
keyFactory.generatePrivate( spec);
这段代码解决了我的问题:
void dear(String publicKeyB64) throws NoSuchAlgorithmException, InvalidKeySpecException{
if (publicKeyB64.contains("-----BEGIN PUBLIC KEY-----") || publicKeyB64.contains("-----END PUBLIC KEY-----"))
publicKeyB64 = publicKeyB64.replace("-----BEGIN PUBLIC KEY-----", "").replace("-----END PUBLIC KEY-----", "");
if (publicKeyB64.contains("-----BEGIN RSA PUBLIC KEY-----") || publicKeyB64.contains("-----END RSA PUBLIC KEY-----"))
publicKeyB64 = publicKeyB64.replace("-----BEGIN RSA PUBLIC KEY-----", "").replace("-----END RSA PUBLIC KEY-----", "");
// ok, you may need to use the Base64 decoder of bouncy or Android instead
try{
byte[] decoded = Base64.decode(publicKeyB64, Base64.DEFAULT);
org.bouncycastle.asn1.pkcs.RSAPublicKey pkcs1PublicKey = org.bouncycastle.asn1.pkcs.RSAPublicKey.getInstance(decoded);
BigInteger modulus = pkcs1PublicKey.getModulus();
BigInteger publicExponent = pkcs1PublicKey.getPublicExponent();
RSAPublicKeySpec keySpec = new RSAPublicKeySpec(modulus, publicExponent);
KeyFactory kf = KeyFactory.getInstance("RSA");
PublicKey generatedPublic = kf.generatePublic(keySpec);
uk =generatedPublic;
//uk is public variable in class and means public key
}
catch (Exception e){
Log.i("your log","errro in dear function");
}
}
这是我的图书馆:
compile "org.bouncycastle:bcprov-jdk15on:1.58"
compile "org.bouncycastle:bcpkix-jdk15on:1.58"