Voglio decodificare il file crittografato in openssl in java. Il file è crittografato con la chiave privata usando openssl e sul lato java voglio decifrarlo usando la chiave pubblica.
Il codice:
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);
}
L'errore:
junit.framework.ComparisonFailure: expected:<[@rm@gEdon2014]>
but was:<[�����(...a lot of these...)��������@rm@gEdon2014
]>
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
Sorprendi tutto è ok!
I file:
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-----
file_prova
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=
La domanda:
Da dove vengono questi segni and e come risolverlo?