当前位置: 首页 > 面试题库 >

将Java中的加密代码转换为Ruby

梁成双
2023-03-14
问题内容

我一直在尝试将用于在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);

谁能让我知道,如何在红宝石中做到这一点。

  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

问题答案:

加密代码:

def aes(key,string)
  cipher = OpenSSL::Cipher::Cipher.new("aes-128-cbc")
  cipher.encrypt
  cipher.padding = 1
  cipher.key = hex_to_bin(Digest::SHA1.hexdigest('secret_key')[0..32])
  cipher_text = cipher.update(string)
  cipher_text << cipher.final
  return bin_to_hex(cipher_text).upcase
end

解密代码:

def aes_decrypt(key, encrypted)
  encrypted = hex_to_bin(encrypted.downcase)
  cipher = OpenSSL::Cipher::Cipher.new("aes-128-cbc")
  cipher.decrypt
  cipher.padding = 1
  cipher.key = hex_to_bin(Digest::SHA1.hexdigest('secret_key')[0..32])
  d = cipher.update(encrypted)
  d << cipher.final
end

hex_to_bin和bin_to_hex

def hex_to_bin(str)
  [str].pack "H*"
end

def bin_to_hex(s)
  s.unpack('C*').map{ |b| "%02X" % b }.join('')
end

在我的情况下,Java代码使用默认的初始化向量,因此我没有设置任何iv,此外,那里hex_to_bin缺少一块。因此,此后,所有程序都开始正常工作。

希望有人遇到此问题对您有所帮助。



 类似资料:
  • 我正在尝试为一个网站构建一个非官方的api。它将要求用户登录,密码将使用标准的Console.readPassword()方法从控制台读取。现在,这给了我一个char数组,但是我必须使用Apache的HttpClient库中的HttpPost类通过POST请求发送密码。为此,需要一个字符串,但是将密码转换为字符串会产生安全风险。我能做什么? 编辑:我知道如何将字符数组转换为字符串。问题是Strin

  • 问题内容: Web服务团队为我提供了此C#代码,该代码公开了一些我计划使用的Web服务。我的密码需要使用此代码进行加密,以便Web服务知道如何在其末尾对其进行解密。 我正在使用Java来使用此Web服务,现在,在将#C代码转换为Java代码时遇到问题,因为该Web服务无法正确解密我的密码。 这是我目前的失败尝试: 我做错什么了?非常感谢。 2013-08-07-更新 我在阅读此网站时,意识到我的模

  • 我必须将下面的Java代码转换成一个UML图,但是我不确定是否正确地完成了类之间的关联。请你告诉我UML图是否正确。

  • 问题内容: 我有一个用Scala编写的应用程序,我的一些团队成员希望使用Java版本。这是一个演示应用程序,可以使用用Scala编写的另一个API,并且他们希望该应用程序的Java版本能够使用Java中的API。但是,该应用程序有些大,我不想用Java手动重排代码(他们也不想学习Scala)。是否有任何工具可以从Scala代码自动生成(可读)Java代码? 问题答案: 他们希望应用程序的Java版

  • 问题内容: 任何人都可以通过建议将C#代码转换为Java代码的转换器的名称来帮助我。实际上,我有一个用C#代码编写的工具,我正在尝试对其进行修改。由于我对C#和.NET框架一无所知,因此我似乎很难自行转换大型代码。我从一些网络信息中发现,存在一些可以将C#转换为Java的工具(虽然可能不正确,但是可以)。任何人都可以通过建议这些工具的名称来帮助我。 问题答案: 免责声明: 没有工具是完美的。 但是

  • 问题内容: 我想知道是否有任何方法可以将A转换为Java可编译代码。 我有一个比较表达式保存在数据库字段中。我想从数据库中检索它,然后在条件结构中对其求值。 有什么办法吗? 问题答案: 如果你使用的是Java 6,则可以尝试使用Java Compiler API。其核心是JavaCompiler类。你应该能够在内存中构造对象的源代码。 警告:由于某些奇怪的原因,我的平台上不存在JavaCompil