gpt4 book ai didi

Java 在 Ruby 中的 SecretKeySpec?

转载 作者:数据小太阳 更新时间:2023-10-29 09:01:57 27 4
gpt4 key购买 nike

我正在尝试将一些 Java 代码移植到 Ruby。我获得了一个类,该类使用 Javacrypto 包 (javax.crypto.*) 中的多个类来进行 加密 使用 Blowfish 的字符串。我坚持了几个部分,希望得到一些帮助。

public String encrypt(String var1) throws BlowfishCipher.BCException {
try {
byte[] var2 = var1.getBytes("UTF-8");
byte[] var3 = this.encrypt(var2);
return bytesToHexString(var3);
} catch (Exception var4) {
if(var4 instanceof RuntimeException) {
throw (RuntimeException)var4;
} else if(var4 instanceof BlowfishCipher.BCException) {
throw (BlowfishCipher.BCException)var4;
} else {
throw new BlowfishCipher.BCException(var4);
}
}
}

public byte[] encrypt(byte[] var1) throws BlowfishCipher.BCException {
try {
Cipher var2 = Cipher.getInstance("Blowfish");
byte[] var3 = hexStringToBytes(this.sKey);
SecretKeySpec var4 = new SecretKeySpec(var3, "Blowfish");
var2.init(1, var4);
return var2.doFinal(var1);
} catch (Exception var5) {
if(var5 instanceof RuntimeException) {
throw (RuntimeException)var5;
} else {
throw new BlowfishCipher.BCException(var5);
}
}
}

private static String bytesToHexString(byte[] var0) {
StringBuffer var1 = new StringBuffer();

for(int var2 = 0; var2 < var0.length; ++var2) {
String var3 = Integer.toHexString(255 & var0[var2]);
if(var3.length() < 2) {
var1.append("0");
}

var1.append(Integer.toHexString(255 & var0[var2]));
}

return var1.toString();
}

同样,我可以在 Ruby 中完成大部分工作,但我缺少的是 SecretKeySpec。 Ruby 中是否有等效项?

我的 Ruby 代码看起来像 this .区别在于我更新的 Cipherblowfish 而不是 bf-ecb

OpenSSL::Cipher.new('blowfish').encrypt

我还设置了自己的 key_length,因为我应该使用的 key 是 14 个字符。

最佳答案

Java 代码似乎首先对 key 进行十六进制解码。 SecretKeySpec 只是 key (随机或伪随机)字节的包装器。

因此您首先需要解码十六进制字符串,然后将其用作 key :

cipher = OpenSSL::Cipher.new('blowfish-xxx-ecb')
cipher.encrypt
cipher.key = [sKey].pack('H*')
return cipher.update(var1) + decipher.final

其中 xxx 是解码 key 的大小以位为单位

关于Java 在 Ruby 中的 SecretKeySpec?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33377412/

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