我想用AES加密实现一个自定义密钥,并且我已经找到了下面的实现和关于这个的详细信息。如何使用存储在密钥库中的自定义密钥执行AES加密?
byte[] key = (SALT2 + username + my_custom_secret_key).getBytes("UTF-8");
MessageDigest sha = MessageDigest.getInstance("SHA-1");
key = sha.digest(key);
key = Arrays.copyOf(key, 16); // use only first 128 bit
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
但我有以下疑点:
byte[] my_key = (SALT2 + username + my_custom_secret_key).getBytes("UTF-8");
SecretKeySpec secretKeySpec = new SecretKeySpec(my_key, "AES");
如果我是用典型事例,如:
KeyGenerator keyGen = KeyGenerator.getInstance("AES");
keyGen.init(128);
SecretKey secretKey = keyGen.generateKey();
- 如何/我应该在哪里存储我的秘密密钥即“mysecretkey_123456”
- 为什么需要“散列”“(SALT2 + usern ame + password)“使用SHA-1/2并将byte []数组传递给SecretKeySpec?
- 为什么我无法将明文密钥作为字节[]发送?
- 我试图确保“密钥”是动态的,以便它基于salt +用户名+ my_custom_secret_key,以便相同的加密字符串将具有不同的输出。
How to generate SALT value in Java?
我想2个Java程序之间共享我的所谓的AES“自定义密码”这样我们就可以使用相同的密钥来加密和解密数据。出于安全原因,我如何保护/存储我的“自定义密码”? – youcanlearnanything
我想使用“密码”而不是密钥的原因是因为我希望密文在每次使用时都改变。即基于每次服务器启动,或每个用户的会话或每个用户的事务。 – youcanlearnanything
在系统密钥存储,拇指驱动器上,在受保护的帐户,在启动过程中输入它,在一个加密的配置文件。完整的密钥管理在这里讨论有点多。当您需要完全自主的应用程序时,您可能只能*密码*密码。最后你需要将它存储在某个地方,再次加密会导致鸡蛋问题。 –