2011-12-16 16 views
2

秘密鍵を使用して文字列またはバイト配列に署名する方法を教えてください。お願いします。 2週間私はそれを達成しようとしています。 私はコードを持っています:秘密鍵を使用して文字列に署名する

private static byte[] createSignature(byte[] file) { 
    byte[] signature = null; 

    try { 
     java.security.KeyStore keyStoreFile = java.security.KeyStore 
       .getInstance("PKCS12"); 
     keyStoreFile.load(new FileInputStream("keyStore.pfx"), 
       "password".toCharArray()); 

     // nuskaitomas privatus raktas iš failo 
     PrivateKey privateKey = (PrivateKey) keyStoreFile.getKey(
       "alais", "password".toCharArray()); 

     Signature dsa = Signature.getInstance(SHA1withRSA); 
     dsa.initSign(privateKey); 
     dsa.update(file, 0, file.length); 
     signature = dsa.sign(); 

    } catch (Exception e) { 
     // TODO Auto-generated catch block 
     e.printStackTrace(); 
    } 
    return signature; 
} 

これは単なる署名です。 。

+1

そのコードはあなたに署名を与えるでしょう。あなたは公開鍵を使ってそれを検証できるはずです。他に何か要りますか? – Thilo

+0

「これは単なる署名です」とはどういう意味ですか?あなたのコードはあなたが求めていることをしているようです。あなたが何かを意味する場合は、自分自身をより明確にしてください – Neal

+0

すべてに感謝します。私は2つの変数を掲示しなければなりません:1.署名されたデータ(文字列)秘密鍵と2.signatureを使用します。私はその違いを理解していない。それはどちらですか? – innspiron

答えて

0

リターンシグネチャを変更します。これの代わりに:

byte[] encryptedByteValue = Base64.encodeBase64(signature); 
return new String(encryptedByteValue, "UTF-8"); 
0

コード例では、入力データの署名を生成します。

データを暗号化された形式で戻す場合は、非対称(または対称)暗号化を使用できます。

あなたの場合、PrivateKeyで暗号化されたデータを返すことができます: 例はhereです。

関連する問題