2011-12-08 11 views
1

最初にSHA-1ダイジェストアルゴリズムを使用して文字列にデジタル署名してから、PrivateKeyを使用して署名するRSAアルゴリズムを適用する必要があります。私はすでに私のデータベースにprivateKeyをbase64のデータ型char(250)として格納しています。電子署名のためにJavaのbyte []をjavaのPrivateKeyに変換する

:これは私はダイジェストアルゴリズムSHA-1を適用する

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

ダイジェストバイトの配列をした私の問題は私が署名のためにそれを使用するためのPrivateKeyに変換する方法がわからないということです

MessageDigest md = MessageDigest.getInstance("SHA-1"); 
byte [] ba = cadena.getBytes(); 
byte [] digest = md.digest(ba); 

これは私が考えた解決策ですが、誰かがより良い解決策を持っていれば私は感謝します。

答えて

4

秘密鍵をどのようにDBに保存したのか分かりません。しかし、this pageは、ファイルシステムからKeyStoreをロードし、PrivatePublicのキーを取得する方法に関するいくつかの情報を提供します。

関連するコードスニペット(あなたの条件に合わせて変更)され、

String password = ...; 
    KeyStore ks = KeyStore.getInstance(KEY_STORE_TYPE); 

    byte[] keyAsByteArray = ...; // The key persisted in the DB 
    InputStream keyStream = new ByteArrayInputStream(keyAsByteArray); 
    ks.load(keyStream, password); 

、その後、

KeyStore.PrivateKeyEntry pkEntry = (KeyStore.PrivateKeyEntry) ks.getEntry(PRIVATE_KEY_ALIAS, password); 
    PrivateKey privateKey = pkEntry.getPrivateKey(); 
+0

は64ベースのエンコードのキーストアタイプは何ですか? – user1084509

+1

@ user1084509私はキーストアタイプがエンコーディングとは関係ないと思います。エンコーディングとは、ある形式のデータを別の形式に変換する手段です。キーストアのタイプは、[この記事(リンク)に記載されているタイプのいずれかである可能性があります](http://docs.oracle.com/javase/1.4.2/docs/guide/security/CryptoSpec.html#AppA) – srkavin

+0

ありがとうあなた、今私はそれを得る。 KeyStore.PrivateKeyEntry pkEntry =(KeyStore.PrivateKeyEntry)ks.getEntry(PRIVATE_KEY_ALIAS、password); ...パスワードの型がKeyStore.ProtectionParameterであると予想されますが、このキャストはどうすればできますか?私のパスワードは、文字の配列または文字列です。 – user1084509

関連する問題