2016-03-27 50 views
0

Bir RSA anahtar çifti oluşturmak ve bunu kodlama/kod çözme verileri için kullanmak istiyorum. Kodum oldukça kısa ama herhangi bir hata bulamıyorum.Doğrudan kodlama/kod çözme, orijinal veri ile sonuçlanmaz

Sorunumu bulmakta bana yardımcı olan var mı?

Her ipucu için teşekkürler!

// Generate key pair. 
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
kpg.initialize(1024, new SecureRandom()); 
KeyPair keyPair = kpg.genKeyPair(); 
PublicKey publicKey = keyPair.getPublic(); 
PrivateKey privateKey = keyPair.getPrivate(); 

// Data to encode/decode. 
byte[] original = "The quick brown fox jumps over the lazy dog.".getBytes("UTF8"); 

// Encode data with public key. 
Cipher cipherEncoder = Cipher.getInstance("RSA/ECB/NoPadding"); 
cipherEncoder.init(Cipher.ENCRYPT_MODE, publicKey); 
byte[] encodedData = cipherEncoder.doFinal(original); 

// Decode data with private key. 
Cipher cipherDecoder = Cipher.getInstance("RSA/ECB/NoPadding"); 
cipherDecoder.init(Cipher.DECRYPT_MODE, privateKey); 
byte[] decodedData = cipherEncoder.doFinal(encodedData); 

// Output. 
System.out.println(new String("Original data: " + new String(original, "UTF8"))); 
System.out.println(new String("Encoded/decoded: " + new String(decodedData, "UTF8"))); 

Sonuçta çıktı ilginç görünüyor.

+1

Çıktıları göster ... – fge

+1

Ders kitabı RSA (dolgu olmadan) gerçekten güvensiz. PKCS # 1 v1.5 dolgu (11 bayt ek yük) de kullanılmamalıdır. Günümüzde, OAEP önerilir (SHA1 için 42 baytlık yük). –

+0

@ArtjomB. Bu ipucu için teşekkürler! Benim için bir OAEP kod örneğiniz var mı? – Christian

cevap

2

Öncelikle verilerinizi deşifre etmek için cipherEncoder kullanıyorsunuz. Muhtemelen cipherDecoder'u kullanmanız gerekiyordu. İkinci olarak, RSA kullanarak dolgu yapmadan sorunlarınız olacak (yani, verileriniz başlangıçta 0 bayttır). En azından PKCS1 dolgu kullanmanızı tavsiye ederim. İşte bu değişikliklerden sonraki kod.

// Generate key pair. 
KeyPairGenerator kpg = KeyPairGenerator.getInstance("RSA"); 
kpg.initialize(1024, new SecureRandom()); 
KeyPair keyPair = kpg.genKeyPair(); 
PublicKey publicKey = keyPair.getPublic(); 
PrivateKey privateKey = keyPair.getPrivate(); 

// Data to encode/decode. 
byte[] original = "The quick brown fox jumps over the lazy dog.".getBytes("UTF8"); 

// Encode data with public key. 
Cipher cipherEncoder = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
cipherEncoder.init(Cipher.ENCRYPT_MODE, publicKey); 
byte[] encodedData = cipherEncoder.doFinal(original); 

// Decode data with private key. 
Cipher cipherDecoder = Cipher.getInstance("RSA/ECB/PKCS1Padding"); 
cipherDecoder.init(Cipher.DECRYPT_MODE, privateKey); 
byte[] decodedData = cipherDecoder.doFinal(encodedData); 

// Output. 
System.out.println(new String("Original data: " + new String(original, "UTF8"))); 
System.out.println(new String("Encoded/decoded: " + new String(decodedData, "UTF8"))); 
+0

Cevabınız ve hatayı bulmak için çok teşekkür ederim. Harika iş! – Christian