为了账号安全,请及时绑定邮箱和手机立即绑定

如何存储密钥对并在其他类中使用它进行解密?

如何存储密钥对并在其他类中使用它进行解密?

慕盖茨4494581 2023-07-19 15:48:11
我正在尝试加密通过邮递员发送到@PostMapping方法的字符串值@RestController并将它们存储在数据库中。这是我用于加密字符串的代码        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");        keyPairGenerator.initialize(1024);        keyPair = keyPairGenerator.generateKeyPair();                   Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");        cipher.init(Cipher.ENCRYPT_MODE, keyPair.getPublic());        encrypted = cipher.doFinal(this.toBeEncrypted.getBytes("UTF-8"));然后我将此encrypted变量存储到数据库中。我有另一个类可以解密存储在数据库中的字符串,但它不会解密加密的值,我知道这是因为它没有正确的密钥来解密。我尝试创建KeyPair一个静态变量,以便我的两个自定义类,StringEncryptor并StringDecryptor使用相同的密钥对对象,但是当服务器重新启动时,它会停止正常工作,所以我相信当服务器重新启动时,我用来加密/解密的静态密钥对对象被重新初始化,因此这不是锁定 String 变量的键。我不确定,但我认为我应该存储锁定 String 对象的密钥,这样我就可以稍后在其他类中再次使用它来解锁加密的字符串。互联网上的大多数教程都是关于密码算法的,其他教程则以相同的方法解密加密文件,这在现实世界的项目中完全无用,这不是我想要的。我需要知道如何存储、存储在哪里以及如何再次检索这些密钥以进行解密。提前致谢。
查看完整描述

1 回答

?
智慧大石

TA贡献1946条经验 获得超3个赞

密钥管理本身就是一个完整的主题。我希望您已经发现,将密钥保存在 RAM 中并不是一种选择。

通常,您会尝试将密钥放入密钥库中。该密钥存储可以由硬件支持。在这种情况下,实际的私钥操作也需要在硬件中进行,否则您必须取出密钥。在最简单的形式中,可以简单地从受密码保护的密钥存储中检索密钥(这意味着最新版本的 Java 的 PKCS#12 兼容文件)。现在您可以存储密钥,但问题是您必须在重新启动时输入密码。

此外,通常 JavaKeyStore实现还需要与私钥一起提供证书,因此您必须为私钥生成或请求证书。有许多关于如何从密钥对创建自签名证书的教程。这是因为 Java 严重依赖 PKIX,即根据美国 ANS(I) 标准的公钥基础设施,这些标准均以字母 X 开头(例如 X.509,它定义了常见的 TLS / CMS 证书的外观)。

好的,现在您知道应该看什么方向了,恐怕您必须从这里开始对如何管理密钥进行一些研究。


查看完整回答
反对 回复 2023-07-19
  • 1 回答
  • 0 关注
  • 80 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信