Android/JVM difference in RSA decryption

前端 未结 2 1086
南方客
南方客 2020-12-29 16:58

I am trying to decrypt a String, that I have encrypted elsewhere. Here is my code:

private void test() {

    try {
        String stringMessage=\"Sf3O7Lr2+W         


        
相关标签:
2条回答
  • 2020-12-29 17:43

    Thanks to GregS's help in the comments. This is the solution that worked for me.

    private void test() {
    
                try {
                    String stringMessage="GEQRpAPA577ks/QveudNkk7H9DjItKGLDYW6xhH1YJGabCVzrkejkBh6S+APwEXxB84UV/q0sO5rqkgXWONJQ8CoMTfqXtUkAAwkYHSc86eGewkM8WpctA0AyNVFonOxDCXm84Uq8JRMzqskSH5VXHmMxvHIvpFgdhmt9Ir0cKWzoLsuvgfY9hfypfEyBXGZcoptQeKhsZxRGIlxbXhrFl/LqhC+F6vYtZ/j5pv2LUP38wh2rTCKnAQ+xvC+7wn5SVzt/Wbr/q7GjCoJuU9uFHQSS49KQDt+BzJL2XNwAMmdbC+XHYkEBBWxVSS+0hdSQxoaKVZZJk4hTnHwQlBAkw==";
                    //Convert String back to Byte[] and decrpt
                    byte[] byteMessage = Base64.decodeBase64(stringMessage.getBytes("UTF-8"));
                    System.out.println("ENCRYPTED MESSAGE byte Length: "+byteMessage.length);
    
                    String decryptedMsg = decryptString(byteMessage, loadCASPrivateKey());
                    System.out.println(decryptedMsg);
                } catch (Exception e) {
                    e.printStackTrace();
                    return;
                }
            }
    
            private static String decryptString(byte[] message, Key privateKey) throws InvalidKeyException, NoSuchAlgorithmException, NoSuchPaddingException, IllegalBlockSizeException, BadPaddingException, UnsupportedEncodingException, NoSuchProviderException {
                Security.addProvider(new org.bouncycastle.jce.provider.BouncyCastleProvider());
    
                Cipher cipher = Cipher.getInstance("RSA/None/NoPadding","BC");
                cipher.init(Cipher.DECRYPT_MODE, privateKey);
    
                byte[] cipherData = cipher.doFinal(message);
                return new String(cipherData, "UTF-8");
            }
    
            private PrivateKey loadCASPrivateKey() throws IOException, NoSuchAlgorithmException, InvalidKeySpecException {
                InputStream is = getClass().getResourceAsStream( "/keys/app-private.key" );
                if (is == null) {
                    System.out.println("NULL");
                }
                byte[] encodedPrivateKey = new byte[(int) 1216];
                is.read(encodedPrivateKey);
                is.close();
    
                // Generate KeyPair.
                KeyFactory keyFactory = KeyFactory.getInstance("RSA");
    
                PKCS8EncodedKeySpec privateKeySpec = new PKCS8EncodedKeySpec(encodedPrivateKey);
                PrivateKey privateKey = keyFactory.generatePrivate(privateKeySpec);
    
                return privateKey;
    
            }
    
    0 讨论(0)
  • 2020-12-29 17:50

    It is possible your feeding the KeyFactory garbage since you are reading into a 2000 byte array, and your key is probably something like 128 (1024 bits) or 256 (2048 bits) bytes long. Additionally, you shouldn't really use RSA for encryption directly: there are security issues with this the data size you can encrypt is limited by the RSA key size.

    0 讨论(0)
提交回复
热议问题