OpenSSL kullanarak Ubuntu makinemde bir mesaj imzalamak için SHA256 ve RSA kullanıyorum. Amacım Android'deki Java'yı kullanarak bu mesajı Android'de doğrulamaktır.OpenSSL kullanarak imzalanmış mesaj; Android Java ile doğrulayamıyor
ardından komutlar ubuntu üzerinde kullanılmıştır:
Şimdi anahtarlarını oluşturdukopenssl genrsa -out private.pem 1024
openssl rsa -in private.pem -out public.pem -outform PEM -pubout
echo 'foobar' > data.txt
openssl dgst -sha256 <data.txt> hash
openssl rsautl -sign -inkey private.pem -keyform PEM -in hash > signature
openssl rsa -in private_key.pem -pubout -outform DER -out public_key.der
openssl enc -base64 -in signature -out base64_signature
, mesaj imzalı Java erişilebilir gerekir kamu anahtar için bir .der dosyası oluşturulur ve mesaj kodlanmış Base64 ile. Daha sonra aygıtımdaki .der ortak anahtarını yerleştirin ve anahtarı PublicKey sınıfına başarıyla yükledim.
public static boolean verify(PublicKey publicKey,String data,String verification){
java.security.Signature sig;
try {
sig = java.security.Signature.getInstance("SHA256WithRSA");
sig.initVerify(publicKey);
try {
sig.update(verification.getBytes());
} catch (Exception e) {
...
}
if (!sig.verify(Base64.decode(data, Base64.DEFAULT))) {
return false;
}
return true;
}
catch ....
return false;
}
Parametreler yöntemini çağırarak:
Bu yöntem mesajı doğrulamak için kullanılır
verify(PublicKey, Base64 encoded data in a String that is to be verified, "foobar");
Açıkçası doğrulama başarısız olur ama nedenini anlayamıyorum. Sanırım kodlamayla (?) Bir şeyler yapmak zorunda.
Güncelleştirme! Base64.decode(data, Base64.DEFAULT))
sonuçlarını bir dosyaya yazmayı ve bir hexeditor kullanarak orijinal imza dosyasıyla karşılaştırmayı başardım. Tamamen farklı! Java, imzaları biraz farklı bir biçimde almayı ve üretmeyi umuyor ve üretmeyi umuyor.
Metin kodlaması sorun olabilir. Bunu, kullanılan 'doğrulamanızın bir SAH256 MessageDigest'i oluşturarak ve çıktıyı OpenSSL hash ile karşılaştırarak kontrol edebilirsiniz. RSA/ECB/NoPadding ile Java'da şifresini çözerek imzanızın "içeriğini" de kontrol edebilirsiniz. – Robert