Java 回顾此基于密码加密的AES-128 CBC示例

Java 回顾此基于密码加密的AES-128 CBC示例,java,cryptography,aes,salt,initialization-vector,Java,Cryptography,Aes,Salt,Initialization Vector,我需要一些帮助来验证下面使用CBC、PKCS5P和IV进行Java AES加密的代码片段 我测试了代码,能够加密和解密。我有以下几个问题 作为良好惯例,密码应存储在何处 在密文中追加/检索salt和IV字节的方法可以吗 任何其他意见,高度赞赏,谢谢 询问 作为良好惯例,密码应存储在何处 对称密钥最好放在保险库中。否则,它们应该放在密钥库上,但是您会遇到保护密钥库密码的问题 是向密码追加/检索Salt和IV字节的方法 文本可以吗 盐应通过以下方式生成: SecureRandom random =

我需要一些帮助来验证下面使用CBC、PKCS5P和IV进行Java AES加密的代码片段

我测试了代码,能够加密和解密。我有以下几个问题

  • 作为良好惯例,密码应存储在何处
  • 在密文中追加/检索salt和IV字节的方法可以吗
  • 任何其他意见,高度赞赏,谢谢 询问

    作为良好惯例,密码应存储在何处

    对称密钥最好放在保险库中。否则,它们应该放在密钥库上,但是您会遇到保护密钥库密码的问题

    是向密码追加/检索Salt和IV字节的方法 文本可以吗

    盐应通过以下方式生成:

    SecureRandom random = SecureRandom.getInstanceStrong();
    
    否则,您将使用较弱的熵池(即linux中的/dev/uradom)来生成安全数字,这将导致更容易破坏的弱密钥

    任何其他意见,高度赞赏,谢谢


    处理字符串转换时,应始终使用相同的编码,即
    .getBytes(“UTF-8”)
    ,以避免出现问题。例如,在转换盐时不使用密码。

    存储密码的最佳位置是人脑。这就是使用密码的首要意义。如果你把它存储在机器上,最好以一种安全的方式存储二进制密钥。你为什么不使用一个做得很好的库呢?请记住,私钥也很难保护。与对称加密相比,非对称加密速度非常慢,并且数据长度限制为小于密钥大小。通常,数据使用对称方法(如AES)进行加密,密钥使用非对称加密进行加密。请注意,TLS使用对称加密对数据进行加密。几乎所有数据都使用对称加密进行加密。给定RSA 2048位密钥,数据限制小于256字节,对于256位EC密钥,数据限制小于32字节。对于AES,基本上没有数据长度限制。对称加密是加密的工作马。在iOS的情况下,所有文件系统数据都使用对称加密:AES进行加密。注意:答案的最后一段WRT symmetric和Asymetric keys已被删除,相关注释也已删除。是的,我正在尽可能地保持这一点与OP相关,并尝试在过程中学习。感谢您的发言,使答案更好、更相关。
    SecureRandom random = SecureRandom.getInstanceStrong();