【发布时间】:2019-09-11 00:48:11
【问题描述】:
我正在尝试加密通过邮递员发送到@RestController 中的@PostMapping 方法的字符串值并将它们存储在数据库中。
这是我的字符串加密代码
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 都使用相同的密钥对对象,但是当服务器重新启动时它会停止正常工作,所以我相信当服务器重新启动时,我用来加密/解密的静态 KeyPair 对象被重新初始化,所以这不是锁定 String 变量的密钥。
我不确定,但我觉得我应该存储用来锁定 String 对象的密钥,以便稍后在其他类中再次使用它来解锁加密的字符串。
互联网上的大多数教程都是关于密码算法的,其他人用同样的方法解密加密文件,这在现实世界的项目中完全没用,这不是我想要的。
我需要知道如何存储和存储在哪里以及如何再次取回这些密钥以进行解密。
提前致谢。
【问题讨论】:
-
有什么原因,您使用的是非对称加密吗?根据我的阅读,它与执行加密/解密的应用程序相同。对于这些场景,对称密码(例如
AES)更适合。 -
@LeonardBrünings,谢谢你提到对称,我切换到 AES,现在很酷。
标签: java encryption public-key-encryption key-pair