SORU
6 ŞUBAT 2009, Cuma


Java ile SHA1, RSA kullanarak.güvenlik.İmza vs Authentication ve Şifreleme

Java ne olduğunu anlamaya çalışıyorumjava.güvenlik.İmzasınıf yok. Ben bir SHA1 ileti özeti hesaplamak ve bunu sindirmek RSA şifreleme kullanarak, sorduğun için farklı bir sonuç alıyorumİmzasınıf aynı şeyi imzalamak için:

// Generate new key
KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
String plaintext = "This is the message being signed";

// Compute signature
Signature instance = Signature.getInstance("SHA1withRSA");
instance.initSign(privateKey);
instance.update((plaintext).getBytes());
byte[] signature = instance.sign();

// Compute digest
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
byte[] digest = sha1.digest((plaintext).getBytes());

// Encrypt digest
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] cipherText = cipher.doFinal(digest);

// Display results
System.out.println("Input data: "   plaintext);
System.out.println("Digest: "   bytes2String(digest));
System.out.println("Cipher text: "   bytes2String(cipherText));
System.out.println("Signature: "   bytes2String(signature));

Sonuç olarak (örneğin):

Giriş Verisi: Bu ileti imzalanmış
Özet: 62b0a9ef15461c82766fb5bdaae9edbe4ac2e067
Şifre metni:... 057dc0d2f7f54acc95d3cf5cba9f944619394711003bdd12
İmza: 7177c74bbbb871cc0af92e30d2808ebae146f25d3fd8ba1622...

Ne temel bir yanlış anlama olmalıİmzayapıyor hepsini takip ettim, ve bir güncelleştirme arıyor gibi görünüyorAuthenticationnesne, algoritma beklediğim gibi SHA1 ayarlayın, sonra Özet, sonra şifreleme yapıyor. Sonuçlar farklı yapan nedir?

DÜZENLEME:

Leonidas imza düzeni öyle düşünüyorum ne yapmam gerektiğini olup olmadığını kontrol yaptı. İmza iki tür RFC olarak tanımlanır

first of these (PKCS1) yukarıda tarif. Bir özet oluşturmak için bir karma işlev kullanır, ve daha sonra özel bir anahtar ile sonuç şifreler.

second algorithm tuz rasgele bir değer kullanır ve daha güvenli ama belirli olmayan. İmza kodunu yukarıdan üretilen eğer aynı tuşa tekrar tekrar kullanılırsa değiştirmez, PSS olabilir sanmıyorum.

DÜZENLEME:

İşte kullanıyordum bytes2string yöntemi:

private static String bytes2String(byte[] bytes) {
    StringBuilder string = new StringBuilder();
    for (byte b : bytes) {
        String hexString = Integer.toHexString(0x00FF & b);
        string.append(hexString.length() == 1 ? "0"   hexString : hexString);
    }
    return string.toString();
}

CEVAP
6 ŞUBAT 2009, Cuma


TAMAM, ne için uğraşıyorum. Aptallık ettim. Leonidas haklı, sadece şifreli aldığı karma değil karma algoritması Özet ile birleştirilmiş KİMLİĞİ ile ilgili bir şey

  DigestInfo ::= SEQUENCE {
      digestAlgorithm AlgorithmIdentifier,
      digest OCTET STRING
  }

Farklı olmasının nedeni budur.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • calicoJake

    calicoJake

    29 EKİM 2007
  • DanceOn

    DanceOn

    6 Mayıs 2006
  • The Onion

    The Onion

    14 Mart 2006