Tôi đang viết một chương trình sử dụng RSA trong Android. Tôi có vấn đề sau đây: Tôi nhận được chìa khóa RSA:Mã hóa RSA trong Android
KeyPair kp = kpg.genKeyPair();
publicKey = kp.getPublic();
privateKey = kp.getPrivate();
Sử dụng chức năng mã hóa để mã hóa một chuỗi thử nghiệm:
String test ="test";
byte[] testbytes = test.getBytes();
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, publicKey);
byte[] cipherData = cipher.doFinal(testbytes);
String s = new String(cipherData);
Log.d("testbytes after encryption",s);
Trong chức năng giải mã tôi đang giải mã dữ liệu trở lại để có được chuỗi gốc
Cipher cipher2 = Cipher.getInstance("RSA");
cipher2.init(Cipher.DECRYPT_MODE, privateKey);
byte[] plainData = cipher.doFinal(cipherData);
String p = new String(plainData);
Log.d("decrypted data is:",p);
Dữ liệu trong 'p' được in ra trong nhật ký không khớp với chuỗi gốc "test". Tôi sẽ sai ở đâu?
Vâng những gì được in ra trong nhật ký? Nếu bạn có khóa không khớp hoặc mật mã bị cắt xén, bạn sẽ nhận được ngoại lệ, không phải là câu trả lời không chính xác. –
Cũng lưu ý rằng 'cipherData' sẽ là một chuỗi nhị phân giống như ngẫu nhiên, do đó chuyển đổi nó thành chuỗi bằng cách chỉ sử dụng byte thô (' String s = new String (cipherData); ') có thể cho bạn kết quả lạ. –