Encryption 使用AES和密码正确/安全地加密数据

Encryption 使用AES和密码正确/安全地加密数据,encryption,passwords,aes,pbkdf2,Encryption,Passwords,Aes,Pbkdf2,现在,我正在做的就是: 1.SHA-1类似于“pass123”的密码,使用十六进制解码的前32个字符作为密钥 2.使用AES-256加密,无论默认参数是什么 ^这足够安全吗 我需要我的应用程序用密码加密数据,并且安全。有太多不同的事情,当我谷歌这和一些事情,我不明白它太多。我问这是一个一般性的问题,而不是任何特定的编码语言(尽管我计划在Java和iOS中使用它) 因此,现在我正在尝试更恰当地执行此操作,请遵循我的想法: 输入密码,如“pass123”,数据为 我要加密的内容,例如“银行帐户为03

现在,我正在做的就是: 1.SHA-1类似于“pass123”的密码,使用十六进制解码的前32个字符作为密钥 2.使用AES-256加密,无论默认参数是什么 ^这足够安全吗

我需要我的应用程序用密码加密数据,并且安全。有太多不同的事情,当我谷歌这和一些事情,我不明白它太多。我问这是一个一般性的问题,而不是任何特定的编码语言(尽管我计划在Java和iOS中使用它)

因此,现在我正在尝试更恰当地执行此操作,请遵循我的想法:

  • 输入密码,如“pass123”,数据为 我要加密的内容,例如“银行帐户为038414838,pin码为5931”

  • 使用PBKDF2从密码派生密钥。参数: 1000次迭代 长度为256比特 盐-这一个让我困惑,因为我不知道从哪里得到盐,我只是补一个吗?与中一样,我所有的加密都会使用salt“F”作为示例(因为salt显然是8位的,这只是一个字符)

  • 现在我拿了这把钥匙,我要把它弄碎吗??我应该用SHA-256吗?安全吗?什么是HMAC?我应该用这个吗? 注意:我是否需要同时执行步骤2和步骤3,还是只执行其中一个步骤就可以了

  • 好的,现在我有256位的密钥来进行加密。因此,我使用AES执行加密,但这里还有另一个令人困惑的部分(参数)。 我真的不确定使用什么不同的“模式”,显然有CBC和EBC以及其他一些模式 我也不确定“初始化向量”,我是否只是编了一个并一直使用那个向量? 那么其他选项呢,什么是PKCS7Padding


  • 对于您的初始点:

  • 使用十六进制可以明显地将密钥大小一分为二。基本上,您使用的是AES-128安全性。这并不坏,但您也可以选择AES-128并使用16字节
  • SHA-1对于密钥派生来说是相对安全的,但不应该直接使用它,因为存在/创建彩虹表。为此,您需要一个类似PBKDF2的函数,它使用迭代计数和salt
  • 至于解决办法:

  • 如果可以避免的话,你不应该加密PIN。请确保您的密码足够安全,允许传递短语
  • 为每个密码创建一个随机数,并使用PBKDF2的输出保存salt(16字节)。salt不必是机密的,尽管您可能希望包含一个系统机密以增加一些额外的安全性。salt和密码是散列的,因此它们可能具有与PBKDF2兼容的任何长度
  • 不,您只需保存PBKDF2生成的秘密,让PBKDF2在需要时生成更多数据
  • 切勿使用ECB(非EBC)。至少使用CBC。请注意,CBC加密不提供完整性检查(有人可能更改密码文本,而您可能永远不会知道)或真实性。为此,您可能需要添加额外的MAC、HMAC或使用加密模式,如GCM。PKCS7Padding(在大多数情况下与PKCS5Padding相同)是一种添加虚假数据以获取N*[blocksize]字节的简单方法,这是按块加密所需的

  • 别忘了在密文前加上(随机)IV,以防重复使用加密密钥。IV类似于salt,但应精确为[blocksize]字节(AES为16)。

    谢谢您的回复。但我还有几个问题。首先,为什么不加密PIN?难道这种加密(或者至少是新建议的加密)不足以进行加密吗?其次,彩虹桌在这里有什么帮助?数据以密文形式发送,如果被截获,没有人可以访问sha-1密钥(如果他们访问了,他们可以立即破解)。接下来,PBKDF2在运行时是否使用哈希?这就是我使用HMAC计算哈希的地方吗?HMAC的秘密钥匙是什么?相同的密码还是随机生成的?请参阅下一条评论的更多内容(我已经没有空间了),使用PBKDF2的所有1000次迭代的盐都是一样的吗?如果salt是随机生成的,那么接收者如何知道salt是什么(理想情况下,接收者只知道主密码)。如果我在密文前加上它,那么盐有什么意义呢。最后,随机静脉注射有什么帮助(相对于0)?具体来说,它如何帮助重用加密密钥?如果有人发现了密钥,那么他们可以解密任何未来的密码文本,即使有随机IV,因为他们可以直接从密码文本中读取。非常感谢你的帮助我很抱歉,但是如果你不亲自做任何研究,你会问多少问题?我已经做了研究,令人惊讶的是,没有一个地方可以解释这种情况,因为它需要解释。