gpt4 book ai didi

javascript - 与 Javascript 相比,执行 AES 加密是 Ruby

转载 作者:行者123 更新时间:2023-12-03 04:37:26 25 4
gpt4 key购买 nike

我正在努力解决这部分代码,我需要从客户端在服务器端(Ruby)解密 AES。我知道所有信息,但我正在努力重新生成加密。

我目前正在使用 https://github.com/brix/crypto-js 中的 CryptoJS 。我不确定它使用的是哪个版本的 AES,这可能是我的第一个问题。

我目前如何在 Javascript 中加密数据的示例是:

encodeURIComponent(CryptoJS.AES.encrypt("Message","Key").toString())

现在我正在 Ruby 中使用 opensslcgi 来尝试解密。这是错误的并且不起作用,但我想展示我正在尝试的内容,因为我相信它很接近。我不明白 key 在加密中是如何使用的,但我正在遵循我发现的示例 here

require "openssl"
require "cgi"

cipher = OpenSSL::Cipher.new('AES-128-CBC')
cipher.encrypt
key = "Key"
iv = cipher.random_iv

encrypted = cipher.update("Message") + cipher.final

puts CGI::escape(encrypted.to_s)

我刚刚放置了“Message”“Key”来不共享我的信息,在安全和密码学方面我是一个业余爱好者,但我已经做到了这些东西用较低级语言没有问题。我认为问题主要发生在两个方面

  1. 我不了解这些高级语言的工作原理以及我正在使用的库
  2. 在这些语言中,字符串有时是 UTF-8 与 UTF-16,因此将“Message” 作为字符串传递可能会导致问题

JAVASCRIPT 中加密和解密的完整示例:

使用输入 1 进行加密和 URL 编码:

encodeURIComponent(CryptoJS.AES.encrypt("1","Key").toString())

结果:

"U2FsdGVkX19Lp8ItQaO5h6Lj68sheHeYrIkJAfqt1Tw%3D"

解码URL并解密:

CryptoJS.AES.decrypt(decodeURIComponent("U2FsdGVkX19Lp8ItQaO5h6Lj68sheHeYrIkJAfqt1Tw%3D"), "Key").toString(CryptoJS.enc.Utf8)

结果:

"1"

最佳答案

上面的评论中 Artjom B 指出了您的至少一个问题,这是尝试让 crypto-js 与其他库互操作时经常出现的问题:crypto-js 没有接受“ key ”您使用它的方式,而不是密码。密码不是 key !!!

在内部,crypto-js 使用非常糟糕的算法将密码转换为 key 。该算法的性能较差有两个原因:(1) 它基于不安全的 MD5,(2) 将密码转换为 key 应该是一个缓慢的过程,以防止暴力猜测密码。在 crypto-js 中,这个过程并不慢。

为了让您朝着正确的方向前进,请勿调用:

CryptoJS.AES.encrypt("Message","Password") 

相反,调用

CryptoJS.AES.encrypt("Message", key, { iv: iv });

您可能还需要探索填充以使其与 Ruby 进行互操作。

关于javascript - 与 Javascript 相比,执行 AES 加密是 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43232834/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com