1

我需要首先使用 SHA-1 摘要算法对字符串进行数字签名,然后应用 RSA 算法,使用 PrivateKey 对其进行签名。我已经将 PrivateKey 作为 base64 中的数据类型 char(250) 存储在我的数据库中。我的问题是我不知道如何将其转换为 PrivateKey 以用于登录:

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

Digest 是一个字节数组,我对其应用了 SHA-1 摘要算法:

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

这是我想到的解决方案,但如果有人有更好的解决方案,我将不胜感激。

4

1 回答 1

4

我不知道您如何将私钥保存到数据库中。但是此页面提供了一些有关如何KeyStore从文件系统加载 a 并检索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();
于 2011-12-08T23:54:08.523 回答