我RSA Public-Key
在服务器端有以下格式:
<string xmlns="http://www.cherripik.com/">
<RSAKeyValue><Modulus>abc</Modulus><Exponent>abc</Exponent></RSAKeyValue>
</string>
我已经尝试了几乎所有可能的方法,但无法encrypt string
在 android 端使用这个公钥。谁能给我一个例子,我将"abc"
用这个公钥加密任何字符串,并将加密的密钥解密回"abc"
. 这对我很有帮助。
提前谢谢。
以下是我使用但没有成功的方法。它提供了一些价值,但它是不正确的。
public String encrypt(String message, String Modulus, String Exponent) {
String outputEncrypted = "";
try {
byte[] modulusBytes = Base64Coder.decode(Modulus);
byte[] exponentBytes = Base64Coder.decode(Exponent);
BigInteger modulus = new BigInteger(modulusBytes );
BigInteger exponent = new BigInteger(exponentBytes);
RSAPublicKeySpec rsaPubKey = new RSAPublicKeySpec(modulus, exponent);
KeyFactory fact = KeyFactory.getInstance("RSA");
PublicKey pubKey = fact.generatePublic(rsaPubKey);
Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
cipher.init(Cipher.ENCRYPT_MODE, pubKey);
byte[] plainBytes = new String("abc").getBytes("UTF-8");
byte[] cipherData = cipher.doFinal( plainBytes );
String encryptedString = new String(Base64Coder.encode(cipherData));
Log.i(this.getClass().getSimpleName(), "encryptedString : "+encryptedString);
} catch (Exception e) {
// TODO: handle exception
}
return outputEncrypted;
}
当我使用上述方法创建加密字符串时,还有一件事。它将给出 346 个字符的加密字符串。但是在我的服务器上,我只有加密和解密方法。在服务器加密方法上,它将产生 344 个字符。最后,当我将加密字符串放入服务器方法以验证我的加密字符串是否正确时。服务器抛出此错误。
<string xmlns="http://www.Myserver.com/">Error occurred while decoding OAEP padding.</string>