最近,在学习后端开发(Node、Express、MongoDB)时,我发现了crypto-js库。根据文档,我们可以使用下面的代码来加密使用AES加密的消息-
const ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString();但是,由于我对密码学还不熟悉,加密算法和密钥之间的区别对我来说并不十分清楚。
我有一条消息,我可以使用AES加密算法加密/解密它。同样,我也可以使用AES加密算法解密消息。因此,我不明白一个秘密钥匙怎么会在这里合适?加密算法和密钥究竟是如何协同工作以保护消息的?
我在互联网上看过无数的视频、博客、StackOverflow帖子等等,但是,我无法通过所有复杂的密码术语完全理解它。我确实有一个模糊的想法,下面我将在Ceaser的密码的帮助下描述这个概念。
在Ceaser的密码中,我所理解的是,用某个数字( (4__) 4 places移位的__A is E__)移动字母的技术是加密算法,而特定数字的加密算法是E 124秘密密钥e 225__。
有谁能告诉我我说得对吗?
发布于 2022-04-09 08:43:15
该算法是用密匙处理数据产生加密数据的一系列步骤。
该算法有两个输入-键和初始数据。该算法接受这两个输入并产生加密的输出。
+---------+ +---------+
| Key | | Data |
+---------+ +---------+
\ /
\ /
\ /
\ /
\ /
+-----------+
| Algorithm |
+-----------+
|
+-----------+
| Encrypted |
| Result |
+-----------+密钥和数据与算法是分开的。如果您更改其中任何一个,您将得到不同的加密结果而不更改算法。
在非常简单的凯撒密码的例子中,算法是将输入中的每个字符替换为另一个字符(替换密码),这个字符在字母表中的偏移量是一定的。
关键是多少钱。因此,如果键为1,则a由b替换,b替换为c等等。算法的代码可以编写成接受键作为输入参数或函数参数,算法代码不需要为不同的键重写。该算法以编程方式将密钥应用于输入数据,生成结果。相同的算法代码适用于您可以传递的所有不同的键。
有谁能告诉我,我是否正确理解凯撒密码中的算法和密钥?
是的,你对此的理解是正确的。
如果我是对的,请您告诉我,在前面提到的AES加密的情况下,这到底是如何翻译的?
AES加密是一种更加复杂的算法,它再次接受输入数据和密钥。在这种情况下,键本身就是一个数据块,而不仅仅是一个数字。如果你想知道更多关于它是如何工作的,你可以在网上找到很多关于它的文章,所以最好阅读这些文章,而不是在这里重复这些。这里有一篇文章:什么是AES加密,它是如何工作的?。
注意,您通常不需要知道给定的加密算法是如何工作的才能成功地使用它。您确实需要知道它有多安全,需要什么样的密钥,它生成什么样的输出,以及如何解密它。但是,您不需要知道算法如何工作的细节。而且,您需要选择正确的算法类型(例如,使用用于加密和描述的相同密钥的对称加密,而不是公钥/私钥对等非对称加密),因为这决定了如何生成/管理/共享秘密。
在您的代码示例中:
const ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString();CryptoJS.AES.encrypt是实现该算法的函数。它接受两个论点。第一个参数是要加密的数据。第二个参数是一个密钥字符串,其中密钥中的所有数据都用于加密,并且需要再次提供密钥,以便对数据进行加密。
调用CryptoJS.AES.encrypt()的结果是数据缓冲区。
https://stackoverflow.com/questions/71806432
复制相似问题