首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在密码js库中,AES加密算法和密钥有什么区别?

在密码js库中,AES加密算法和密钥有什么区别?
EN

Stack Overflow用户
提问于 2022-04-09 08:32:14
回答 1查看 470关注 0票数 -1

最近,在学习后端开发(Node、Express、MongoDB)时,我发现了crypto-js库。根据文档,我们可以使用下面的代码来加密使用AES加密的消息-

代码语言:javascript
复制
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__。

有谁能告诉我我说得对吗?

  • 如果我是对的,请您告诉我,在前面提到的AES加密的情况下,这到底是如何翻译的?
  • 如果我不正确,有人能用一个简单的类比来解释这个问题吗?请尽量减少使用密码术语,否则我会再次迷路。
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-04-09 08:43:15

该算法是用密匙处理数据产生加密数据的一系列步骤。

该算法有两个输入-键和初始数据。该算法接受这两个输入并产生加密的输出。

代码语言:javascript
复制
+---------+  +---------+
|   Key   |  |   Data  |
+---------+  +---------+
    \            /
     \          /
      \        /
       \      /
        \    /
    +-----------+
    | Algorithm |
    +-----------+
          |
    +-----------+
    | Encrypted |
    | Result    |
    +-----------+

密钥和数据与算法是分开的。如果您更改其中任何一个,您将得到不同的加密结果而不更改算法。

在非常简单的凯撒密码的例子中,算法是将输入中的每个字符替换为另一个字符(替换密码),这个字符在字母表中的偏移量是一定的。

关键是多少钱。因此,如果键为1,则ab替换,b替换为c等等。算法的代码可以编写成接受键作为输入参数或函数参数,算法代码不需要为不同的键重写。该算法以编程方式将密钥应用于输入数据,生成结果。相同的算法代码适用于您可以传递的所有不同的键。

有谁能告诉我,我是否正确理解凯撒密码中的算法和密钥?

是的,你对此的理解是正确的。

如果我是对的,请您告诉我,在前面提到的AES加密的情况下,这到底是如何翻译的?

AES加密是一种更加复杂的算法,它再次接受输入数据和密钥。在这种情况下,键本身就是一个数据块,而不仅仅是一个数字。如果你想知道更多关于它是如何工作的,你可以在网上找到很多关于它的文章,所以最好阅读这些文章,而不是在这里重复这些。这里有一篇文章:什么是AES加密,它是如何工作的?

注意,您通常不需要知道给定的加密算法是如何工作的才能成功地使用它。您确实需要知道它有多安全,需要什么样的密钥,它生成什么样的输出,以及如何解密它。但是,您不需要知道算法如何工作的细节。而且,您需要选择正确的算法类型(例如,使用用于加密和描述的相同密钥的对称加密,而不是公钥/私钥对等非对称加密),因为这决定了如何生成/管理/共享秘密。

在您的代码示例中:

代码语言:javascript
复制
const ciphertext = CryptoJS.AES.encrypt('my message', 'secret key 123').toString();

CryptoJS.AES.encrypt是实现该算法的函数。它接受两个论点。第一个参数是要加密的数据。第二个参数是一个密钥字符串,其中密钥中的所有数据都用于加密,并且需要再次提供密钥,以便对数据进行加密。

调用CryptoJS.AES.encrypt()的结果是数据缓冲区。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71806432

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档