Преобразование байта [] в PrivateKey в Java для цифровой подписи - PullRequest
1 голос
/ 09 декабря 2011

Мне нужно сначала подписать цифровую строку, используя алгоритм дайджеста SHA-1, а затем применить алгоритм RSA, используя PrivateKey, чтобы подписать его.У меня уже есть PrivateKey, хранящийся в моей базе данных как тип данных char (250) в base64.Моя проблема в том, что я не знаю, как преобразовать его в PrivateKey для использования его для входа в систему:

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

Дайджест - это массив байтов, к которому я применил алгоритм дайджеста SHA-1:1004 *

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

Это решение, о котором я думал, но если у кого-то есть лучшее решение, я был бы признателен.

1 Ответ

4 голосов
/ 09 декабря 2011

Я не знаю, как вы сохранили закрытый ключ в БД. Но эта страница предоставляет некоторую информацию о том, как загрузить KeyStore из файловой системы и получить ключи Private и Public.

Соответствующий фрагмент кода (измененный в соответствии с вашими требованиями):

   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();
...