加密与公钥+ 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”。为什么是这样?

+0

您的*方法是无效的Java。你是不是指'public void'在哪里输入'function'? –

+0

是的,它被剪切 - 复制错误:D – CodeFury

当我发送相同的输出到服务器,它说“无法解密PIN”。为什么是这样?

有可能是很多原因为此。如果您有解密服务器的代码,请将其添加到您的问题中。

原因可能包括:

  • 错误加密模式。您已选择RSA/ECB/NoPadding,但服务器可能还在等待其他事情?

  • Base64编码 - 服务器肯定会期待这个吗?

  • 该消息是“无法解密PIN”。如果您正在加密的data是PIN,您确定应该加密ASCII字节吗?

+0

是的,服务器期待“RSA/ECB/PKCS1Padding”:) – CodeFury

+0

也请记住,PKCS1Padding有多种针对原始RSA加密的攻击,因此请重新考虑使用此功能。 –