加密与公钥+ Base64编码加密字符串
问题描述:
我在字符串格式的RSA公钥,我想使用相同的基地64.这里加密字符串,我使用此代码:加密与公钥+ Base64编码加密字符串
function encrypt(String pin){
String key = "MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAiOnM5t6w2ZD6dpA4/MzSTAOt0IYpnsmGSAIfIVgGntI+fI4wbvUvMIhaLN3fHrjyuNGFdYw+yuoXYkapajt6VTZJniaatSiq6bwQ7R0UAop6haFSAwjnmReqexJvcKyqUsTfcfFypPpsYRewh/48/jmc/6ND+ugxDd52prkPUrbj+nnO0z3DBoUCpgDMRvW2hWXv6kZ654gp+wIAQnxbdwRMy6FZbrHjkA3tc6U0CHK+KjxAfzWAK+yI+ofskM4qk50J7y9hUZ7lLikqWZWKiqh8xiDk1kgu+FIjVh+fylKpa3gWmPPn0fSpBJjuenc1OQVmZ718a3388DjzFlYOLwIDAQAB";
byte[] sigBytes2 = Base64.decode(key, Base64.DEFAULT);
Log.d("WS", "new key is: " + key);
try {
PublicKey publicKey = KeyFactory.getInstance("RSA")
.generatePublic(new X509EncodedKeySpec(sigBytes2));
encryptedBase64PIN = encode(publicKey, pin);
Log.d("WSA", "encoded key is: " + encryptedBase64PIN);
// getSecToken();
} catch (Exception e) {
e.printStackTrace();
}
}
public static String encode(Key publicKey, String data)
throws NoSuchAlgorithmException, NoSuchPaddingException,
InvalidKeyException, IllegalBlockSizeException, BadPaddingException {
byte[] byteData = data.getBytes(); // convert string to byte array
Cipher cipher = Cipher.getInstance("RSA/ECB/NoPadding");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] encryptedByteData = cipher.doFinal(byteData);
String s = Base64.encodeToString(encryptedByteData, Base64.NO_WRAP);
return s; // convert encrypted byte array to string and return it
}
当我发送相同的输出到服务器,它说“无法解密PIN”。为什么是这样?
答
当我发送相同的输出到服务器,它说“无法解密PIN”。为什么是这样?
有可能是很多原因为此。如果您有解密服务器的代码,请将其添加到您的问题中。
原因可能包括:
错误加密模式。您已选择
RSA/ECB/NoPadding
,但服务器可能还在等待其他事情?Base64编码 - 服务器肯定会期待这个吗?
该消息是“无法解密PIN”。如果您正在加密的
data
是PIN,您确定应该加密ASCII字节吗?
+0
是的,服务器期待“RSA/ECB/PKCS1Padding”:) – CodeFury
+0
也请记住,PKCS1Padding有多种针对原始RSA加密的攻击,因此请重新考虑使用此功能。 –
您的*方法是无效的Java。你是不是指'public void'在哪里输入'function'? –
是的,它被剪切 - 复制错误:D – CodeFury