了解 cryptojs 中的不同加密模式
understanding different encrypt mode in cryptojs
我正在学习各种散列技术并找到了有趣的库 cryptoJs
在文档中,有多个选项定义如下
哈希
HMAC
PBKDF2
密码
编码器
我理解散列是关于生成密文。 HMAC 是关于生成消息验证码的。但我很难区分 PBKDF2、密码和编码器。什么时候选哪个?
任何指点都有帮助。
PBKDF2 用于散列密码,但使用通常的散列函数,您的密码容易受到 dictionary attacks. So here comes PBKDF2 and salt.
的攻击
Ciphers:这些是您的常规加密函数。如果你想发送一些只有拥有正确密钥的人才能解密的加密消息。
编码器:用于文本 encoding 格式。
基于密码的密钥派生函数 2 - PBKDF2 是用于创建加密密钥的函数,这些密钥更难使用 key-stretching. 进行暴力破解,因为人类很懒惰并且会创建密码太容易暴力破解了。
例如:我们最喜欢的密码是"password"
给定盐“5C52FBAE9A4D97A49D14C8AF338DA55C”
加密密钥变为
(十六进制)A2EB261802FFD1965D034AC252E880A44955078D6D4F12EDCDF6D03549F0
(B64)ousmGAL/0ZZdA0rCUuiApElVB41tTxLtzfbQNUnw
试一试here
很明显,散列本身不像 "password" 那样容易破解。
尽管如此,使用预先计算的哈希值仍然是可能的。你可以看到更多here.
另一方面,Ciphers 包含执行加密和解密的方法。您在 cryptoJs 中看到的一些密码是您的基本 AES、DES、三重 DES 等
编码器只是用于编码非常通用的编码。它主要用于转换数据,以便另一个系统可以理解它。在技术领域,这很大程度上是因为每个系统架构和技术都有自己的解释。不同的应用程序将根据需要理解不同的编码。
总而言之,
加密和编码以两种方式设计,而 PBKDF2 是一种生成加密密钥(散列)的方法,它们以一种方式设计。编码器用于将数据编码成可以由另一个系统传输或解释的形式。
结合上下文:
如果我们想将密码存储在数据库中,我们会对其进行哈希处理,因为我们不需要知道密码是什么(不需要反转)。然而,当我们向朋友发送加密邮件时,我们希望能够逆转加密(解密)。否则内容丢失。发送邮件时,我们添加了一个附件。附件以其他电子邮件客户端可以解码的方式进行编码,否则其他系统无法打开附件或会错误地解释发送的数据。
所以编码和加密的相似之处在于编码文本和加密文本都可以反转。但是,由于编码方案是公开可用的,因此编码文本意味着任何人或任何接触到编码文本的系统都可以逆转,但加密文本(如密文)只能由某些特定的个人逆转,即拥有该编码文本的人密钥或解密算法。在我们上面的示例中,我们希望我们的附件能够被任何系统解释,但我们不希望包括附件在内的电子邮件内容被所有人打开。
我正在学习各种散列技术并找到了有趣的库 cryptoJs
在文档中,有多个选项定义如下 哈希 HMAC PBKDF2 密码 编码器
我理解散列是关于生成密文。 HMAC 是关于生成消息验证码的。但我很难区分 PBKDF2、密码和编码器。什么时候选哪个?
任何指点都有帮助。
PBKDF2 用于散列密码,但使用通常的散列函数,您的密码容易受到 dictionary attacks. So here comes PBKDF2 and salt.
的攻击Ciphers:这些是您的常规加密函数。如果你想发送一些只有拥有正确密钥的人才能解密的加密消息。
编码器:用于文本 encoding 格式。
基于密码的密钥派生函数 2 - PBKDF2 是用于创建加密密钥的函数,这些密钥更难使用 key-stretching. 进行暴力破解,因为人类很懒惰并且会创建密码太容易暴力破解了。
例如:我们最喜欢的密码是"password"
给定盐“5C52FBAE9A4D97A49D14C8AF338DA55C”
加密密钥变为 (十六进制)A2EB261802FFD1965D034AC252E880A44955078D6D4F12EDCDF6D03549F0 (B64)ousmGAL/0ZZdA0rCUuiApElVB41tTxLtzfbQNUnw
试一试here
很明显,散列本身不像 "password" 那样容易破解。
尽管如此,使用预先计算的哈希值仍然是可能的。你可以看到更多here.
另一方面,Ciphers 包含执行加密和解密的方法。您在 cryptoJs 中看到的一些密码是您的基本 AES、DES、三重 DES 等
编码器只是用于编码非常通用的编码。它主要用于转换数据,以便另一个系统可以理解它。在技术领域,这很大程度上是因为每个系统架构和技术都有自己的解释。不同的应用程序将根据需要理解不同的编码。
总而言之,
加密和编码以两种方式设计,而 PBKDF2 是一种生成加密密钥(散列)的方法,它们以一种方式设计。编码器用于将数据编码成可以由另一个系统传输或解释的形式。
结合上下文:
如果我们想将密码存储在数据库中,我们会对其进行哈希处理,因为我们不需要知道密码是什么(不需要反转)。然而,当我们向朋友发送加密邮件时,我们希望能够逆转加密(解密)。否则内容丢失。发送邮件时,我们添加了一个附件。附件以其他电子邮件客户端可以解码的方式进行编码,否则其他系统无法打开附件或会错误地解释发送的数据。
所以编码和加密的相似之处在于编码文本和加密文本都可以反转。但是,由于编码方案是公开可用的,因此编码文本意味着任何人或任何接触到编码文本的系统都可以逆转,但加密文本(如密文)只能由某些特定的个人逆转,即拥有该编码文本的人密钥或解密算法。在我们上面的示例中,我们希望我们的附件能够被任何系统解释,但我们不希望包括附件在内的电子邮件内容被所有人打开。