简体   繁体   English

Java / Android中的OpenSSL RSA解密

[英]Openssl rsa decrypt in java/android

I want to decrypt file encrypted in openssl in java. 我想解密在Java中的openssl中加密的文件。 File is encrypted with private key using openssl and on java side i want to decrypt it using public key. 使用openssl使用私钥对文件进行加密,而在Java端,我想使用公钥对文件进行解密。

The code: 编码:

public void testRSA() throws InvalidKeySpecException, NoSuchAlgorithmException, IOException, IllegalBlockSizeException, InvalidKeyException, BadPaddingException, NoSuchPaddingException {
    String rawPublicKey = new String(StreamUtils.loadBytes(getContext().getAssets().open("public.key")));
    Log.d(TAG, rawPublicKey);
    rawPublicKey = rawPublicKey.replace("-----BEGIN PUBLIC KEY-----\n", "");
    rawPublicKey = rawPublicKey.replace("-----END PUBLIC KEY-----", "");
    byte[] encoded = Base64.decode(rawPublicKey, 0);
    PublicKey publicKey = SignUtils.getAsPublicKey(encoded);

    byte[] encryptedFile = StreamUtils.loadBytes(getContext().getAssets().open("encrypted_file.bin"));
    String encryptedFileString = new String(encryptedFile);

    //STACK_NOTE: This file contains 3 parts but only first is used by this code.
    // encryptedFileParts[0] is equal to test_file from OpenSSL test
    String[] encryptedFileParts = encryptedFileString.split(";");
    Log.d(TAG, new String(encryptedFileParts[0].getBytes()));

    byte[] encryptedKey = Base64.decode(encryptedFileParts[0].getBytes(), 0);

    Log.d(TAG, new String(encryptedKey));

    Cipher cipher = Cipher.getInstance("RSA");
    cipher.init(Cipher.DECRYPT_MODE, publicKey);
    byte[] bytesPassword = cipher.doFinal(encryptedKey);

    String passwd = new String(bytesPassword, "UTF8");
    Log.d(TAG, "Recieved password = " + passwd);
    assertEquals("@rm@gEdon2014", passwd);
}

The error: 错误:

junit.framework.ComparisonFailure: expected:<[@rm@gEdon2014]>
but was:<[�����(...a lot of these...)��������@rm@gEdon2014
]>

OpenSSL test: OpenSSL测试:

$ openssl enc -d -base64 -in test_file -out test_file_dec
$ openssl rsautl -verify -inkey public.key -in test_file_dec -pubin
@rm@gEdon2014

Surprise everything is ok! 惊喜一切都好!

The files: 文件:

public.key 公钥

-----BEGIN PUBLIC KEY-----
MIICIjANBgkqhkiG9w0BAQEFAAOCAg8AMIICCgKCAgEAxOIG72RiGb73AOn0LtVm
WvD5IlyVnp6xBhn2Q0LreiQ4htmzPd8oSRhCxlYDIJLz9mfq10cSvV6+iKLeDQh5
EI06XcB8x2wSbqv5+rkCy8r6efcrjNq5SSTdDdzk2Pb6I952mgincwvwgeD7BNxx
SIvVWGnZwb4b8NetrRJ4IQqvj7lD96qJ/veMUduQ0S6VC17G28fNefRSr2O4v0GU
vPLFiliYUEzBmE3S9gIWcSiktACo+ddz8OChouxtANLqBxS6Lz1o8AAfcIweF0vm
ZbDpteYBNGCiuHgPDNB+7Hcf+8xjUfQkE2N35dkVobh6DmgRyFT9q7ZJQERkrnr4
fCzq53Z3kR4gp0taRqUTb2KdxJHLleW5tYAcKCs2OszOcsgz00oapl6ZbiJrxA5b
bQovpiCr7UJ3zCgs293vUXK5aa/ajU4hIiL1YXtdiX8XH5uwePvWMnX7mSww801z
rOko29etXhYgieAVepr/mGh64fZg5xHW2tEKhL+7Bo/yPmxsKMFNGQUdXST0GReA
dLs+LiecnEjuNeKYqRIrbOYC/BPXoJ6cNq/KJ46TyQ+a6zh2qVDPqYQe67Q5HJu2
47gILn1j1C/CbXa/CVapeOjqV/4gVh7LepIJMag9uMTazN1vlt7/ItEvb5n4QrAW
G0kh72xOkoHIeVe4/c3rJzECAwEAAQ==
-----END PUBLIC KEY-----

test_file test_file

UFnXFnQmzefIwB0KkkGwcbAng/l4uM+8ecC5FFz2sPeVeha1vb/Wbbpd0W/BffSz
v2Luq0ItX3vogRzx94MNXo4Tz1CjA0CQhOkYL+y92/sW7jClfnxWH2IEs5mdl/we
SR60AdxD0H2RCeWDWZnOmgQQbRMOj0R0+j1ek5p8Mhj+Ew81g2aql8Nu/EGvqn+h
LYR6ZevlKmn5XW7a17om6RW9w0g04QfCTldxOH0IZOszVSfkadx6yvCpHxTi0WRv
8JJXVhilZxtTTDaVj38PJ7XUC6JoTcGNxVLi1G2okHTMFfsTFKUy+NNVSMEHM01t
dDvkWH9CZXXiZREMeu2kK/0D+GoQrsLmJ9O2L3lv/apN4qabqZ/NXpfA+jNE5Pfi
ckoUi1A2utmnM4H6HeL8Ap+QHcAr7G5NBjahxMF5X0YVmEtGhzMt3Dt+S3jhNfPS
tk5Ic6rqmgvipc6kG5ApTgwgRhn+ferEG+KQIG0hkAtP6yEoJw5unznld75Y/t7y
djdnb71HNPRVoxVc4aI96tAJSrqXHjmYMxpEWKKb1VTWxnn77vjdGdU7sqlipGCU
jc+k2csUICaJzg4CjGykTsRF8cDkUlAcN8ZPgdVJWGWghvrUgDurYMmic2aaqGvQ
zYxl1ErE8y92z0tQKXGYWMAHQvyB7Gpga1km1oDURdM=

The question: 问题:

Where did these signs came from and how to fix it? 这些标志来自何处以及如何解决?

I received answer on Information security . 我收到了有关信息安全的答复。

These signs are simply 0x0 bytes. 这些符号只是0x0字节。 Before using password I need to remove them from received password bytes. 在使用密码之前,我需要从收到的密码字节中删除它们。

Link answer 链接答案

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM