gpt4 book ai didi

java - 将 java 中的加密代码转换为 Ruby

转载 作者:数据小太阳 更新时间:2023-10-29 08:08:18 25 4
gpt4 key购买 nike

我一直在尝试将 java 中的加密代码转换为 ruby​​,但我无法完全做到。我得到不同的值。

   passphrase = passphrase + STATIC_KEY;
byte[] key = passphrase.getBytes("UTF-8");

MessageDigest sha = MessageDigest.getInstance("SHA-1");
key = sha.digest(key);
key = Arrays.copyOf(key, 16);
SecretKey secretKey = new SecretKeySpec(key, "AES");

Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
IvParameterSpec initialisationVector = new IvParameterSpec(
new byte[16]);
cipher.init(Cipher.ENCRYPT_MODE, secretKey, initialisationVector);

byte[] encryptedData = cipher.doFinal(plainText.getBytes("UTF-8"));

return SimpleCrypto.toHex(encryptedData);

任何人都可以让我知道,这是如何在 ruby​​ 中完成的。

  unencrypted = "passphrase"
c = OpenSSL::Cipher.new("aes-128-cbc")
c.encrypt
c.key = Digest::SHA1.hexdigest('secret_key')[0...32]
e = c.update(unencrypted)
e << c.final
return e

最佳答案

require 'openssl'

加密:

unencrypted = "I am a secret!"

初始化密码进行加密

cipher = OpenSSL::Cipher::AES.new(128, :CBC)
cipher.encrypt

使用 SHA1 创建 key

key = Digest::SHA1.hexdigest('secret_key')[0...32]
cipher.key = key

用输入创建初始化 vector

iv = Digest::SHA1.hexdigest('secret_iv')[0...32]
cipher.iv = iv

创建一个随机初始化 vector

iv = cipher.random_iv

运行加密

encrypted = cipher.update(unencrypted) + cipher.final

解密:

初始化密码进行解密

decipher = OpenSSL::Cipher::AES.new(128, :CBC)
decipher.decrypt

加载 key 和初始化 vector

decipher.key = key
decipher.iv = iv

解密明文

plain = decipher.update(encrypted) + decipher.final

匹配吗?

puts unencrypted == plain #=> true

有关更多信息,请查看类的 Ruby 文档 - OpenSSL::Cipher

关于java - 将 java 中的加密代码转换为 Ruby,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28235569/

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