我使用这个(Android:使用存储在文件中的公钥解密 RSA 文本)作为指南,使用公钥加密“字符串”,然后使用 ruby 中的私钥解密。
但是,我遇到了困难。部分原因是我在 Java 中加密字节,然后当我在 Ruby 中解密时,我没有翻译它。我附上下面的 Android 代码段:
// reads the public key stored in a file
AssetManager am = mContext.getAssets();
InputStream is = am.open("public_key.pem");
BufferedReader br = new BufferedReader(new InputStreamReader(is));
List<String> lines = new ArrayList<String>();
String line = null;
while ((line = br.readLine()) != null)
lines.add(line);
// removes the first and last lines of the file (comments)
if (lines.size() > 1 && lines.get(0).startsWith("-----") && lines.get(lines.size()-1).startsWith("-----")) {
lines.remove(0);
lines.remove(lines.size()-1);
}
// concats the remaining lines to a single String
StringBuilder sb = new StringBuilder();
for (String aLine: lines)
sb.append(aLine);
String keyString = sb.toString();
// converts the String to a PublicKey instance
byte[] keyBytes = Base64.decode(keyString.getBytes("utf-8"), 0);
X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);
KeyFactory keyFactory = KeyFactory.getInstance("RSA");
PublicKey key = keyFactory.generatePublic(spec);
//byte[] encryptedText = null;
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, key);
String encryptedText = Base64.encodeToString(cipher.doFinal(message), 0);
return encryptedText;
我在 ruby 中使用以下代码来尝试解码加密数据
pkey = OpenSSL::PKey::RSA.new private_key
print pkey.private_decrypt(Base64.decode64(android_encrypted_value))
当测试在 Java 中生成的 base64 值与我在 ruby 中的另一个代码中生成的值不匹配时,我立即注意到了一个问题。任何想法?