10

DurumJava'da RSA Şifreleme: Çapraz Platform Sorunları?

Java'da RSA şifrelemesi ile çalışıyorum. Ben Cyanogenmod's Android 2.2 ile donatılmış bir HTC Saphire (32B) geliştirici telefon veri şifrelemek çalışıyorum ve daha sonra Mandriva Linux 2010 çalışan bir 64 bit sunucu üzerinde şifresini çözmek. Ben her iki makinede aynı ortak anahtar, özel anahtar çifti kullanıyorum , Android telefonda verileri şifrelemek/şifresini çözebilir, doğru bir şekilde Linux sunucusunda verileri şifreleyebilir/şifresini çözebilir, ancak telefondaki verileri şifreleyip sunucuda şifresini çözemiyorum. Kötü dolgu istisnaları alıyorum. Verilerin telefon tarafından doğru bir şekilde gönderildiğini ve sunucu tarafından doğru şekilde ayrıştırıldığını doğruladım. Bu nedenle, şifre çözme işleminin neden başarısız olduğunu anlayamıyorum. Birisi bana yardım edebilir mi? Belki de Java'daki RSA algoritması, kelime boyutuyla ilgili bazı temel varsayımlara sahiptir?

fazla bilgi:

  • My şifreleme/şifre çözme kütüphane kılavuzunda dayanmaktadır here.
  • Benim şifreleme anahtarı uzunluk olarak 2048 bit olduğunu buldum ama farklı anahtar boyutları ile benzer davranışlar görüyorum.
  • RSA şifreleme/şifre çözme kodumu bir jar dosyasına paketledim. Sunucu makinesinde Eclipse aracılığıyla derlenmiştir.
  • Android telefondaki şifreleme kütüphanesini kullanan program, yukarıdaki kütüphaneyi kullanır. Eclipse kullanılarak da yapıldı.
  • Sunucu programı Netbeans kullanılarak oluşturulmuştur (bunu yapmak daha kolay olduğu için).

Diğer Sorular

  • Java için mevcut diğer ücretsiz açık anahtarlı şifreleme algoritmaları/kütüphaneler musunuz? Çapraz platformda çalışıyorlar mı? Onlardan bir performans bekler miydi? Vb, vb. Buna baktım ve fazla bir şey bulamadım; belki yanlış anahtar kelimeleri arıyorum.

Sonunda! Bence bu kadar. Yardımınız için şimdiden teşekkür ederiz!

+0

herhangi bir algoritma çapraz platformda çalışmalıdır, problem şu anda kodunuzda (veya yapılandırmada) büyük olasılıkla – bestsss

+0

Config, eh? RSA hakkında yapılandırılabilir nedir? Bunu Java'da nasıl yaparım? Bir eğiticiye bir link verebilir misiniz? Zamanınızı almak istemiyorum, ama kendiniz gibi bir uzmana (ya da tecrübeli bir kişiye) sahip olmak, doğru yönde bana işaret etmek hayatımı daha kolaylaştıracaktır. –

+0

(sry akşam yemeği için kaçtı) Genel/özel anahtar olarak yapılandırmayı kastediyorum, kötü doldurma çoğunlukla hatalı değiştirilen anahtar çiftin neden olduğu. Eğer emin iseniz ve nedense android güneşin impl ile aynı dolguyu desteklemiyor. http://www.bouncycastle.org/ btw'yi deneyebilirsiniz, aynı cihazdaki/makinedeki verileri nasıl şifreler/çözersiniz? – bestsss

cevap

12

RSA şifreleme (veya herhangi bir şifreleme algoritması) çevreden bağımsız çalışmalıdır. Bununla birlikte, bazı sistemlerin varsayılan dolgu ve çalışma şekli hakkında farklı varsayımlar yapması mümkündür. Şifreleme ve şifre çözme yaparken, sadece algoritmayı değil, aynı zamanda çalışma modunu (CBC, vb.) Ve dolguyu tam olarak belirttiğinizden emin olun. Bu işe yaramazsa, kodunuzu hem cihazdan hem de sunucudan göndermenizi öneririm, böylece daha yakından inceleyebiliriz.

Düzenleme Eğer kripto paketinden bir şifre olsun, genellikle aşağıdaki kodla bunu, Java, sorunuzu ele almak için:

Cipher cipher; 
cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); 

getInstance sağlanan dize kadar çalışma zamanını bildirir AES algoritmasını, şifre bloğu zincirleme işletim modunu ve PKCS5 Dolgusunu kullanacak bir şifre örneği alın. Desteklenen birçok algoritma ve dolgu vardır.Java'da şifreleme hakkında daha fazla bilgi için this document from Oracle'u kontrol edebilirim.

dize Java tüm algoritmalar, çalışma modları ve kenarların, bir dizi değil sağlayan rağmen şifre,

<algorithm>/<mode of operation>/<padding> 

da kötüsü formatında istemek için kullanın daha spesifik olmak gerekirse birlikte çalışacaklar. Çalışacak bir yapılandırma dizesi bulmak için belgeleri okumalısınız.

+0

Biri çalışma modunu ve dolguyu nasıl belirler? RSA kullanırken kullanabileceğim tüm seçeneklerin aslında farkında değilim. Başlayabileceğim iyi linkler veya bazı genel tavsiyeler var mı? –

+0

Bağlantınız ve tavsiyeniz son derece umut verici görünüyor. Şimdi deneyemem, ama Çarşamba gününden bu şansı bulabilirim; Yaptığım zaman ASAP'ı rapor etmeye çalışacağım. Sadece sizi anladığımdan emin olmak için, şifreyi her oluşturduğumda, algoritmayı, modu ve dolguyu belirtiyorum ve bu, herhangi bir platforma bağlı varsayımın yapılmasını açık bir şekilde düzenleyebilir, değil mi? –

+0

Bu iyi çalıştı; Daha önce hiç kontrolüm olmadığı bazı varsayımlar yapılmalıydı. Yardım ettiğin için teşekkür ederim! –

0

Belki verilerin bir sağlama yapmak ve onu tam olarak şifreleme/şifre çözme API'leri geçirilecek istediğine emin olun.

+0

Ah, zaten sağlama toplamı yapıyorum. Dediğim gibi, veriler gayet iyi geliyor gibi görünüyor (ve bunu oluşturan sistemde şifresi çözülebiliyor), ancak telefonda şifrelenmiş veriler cihazda şifresi çözülemiyor. Yine de, tavsiye için teşekkürler! –