在Ruby中加密/解密3DES [英] Encrypting/decrypting 3DES in Ruby

查看:221
本文介绍了在Ruby中加密/解密3DES的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

  -12,110,93, 14,-48,... 

这是由服务使用来解密3DES内容,但是我需要通过Ruby进行加密。



我已经尝试了大量的场景,如何设置密钥以及如何处理它,但是至今没有效果:




  • 尝试将密钥分解,并将每个数字转换为十六进制,连接十六进制值以使密钥

  • 尝试将数字字符串转换为二进制

  • 尝试将生成的十六进制转换为二进制



我想我需要做的是简单的例子:

  des = OpenSSL :: Cipher :: Cipher.new ('des3')
des.decrypt
des.key = mistery#这一步是我在
有问题的地方最后= des.update(加密)+ des.final

有什么想法,我应该用这个关键?



主要示例:

  -62,-53,124,-110 ,37,-88,-48,31,-57,93,70,-101,44,69,-88,-57,-123,-99,118,-119,110,55,11,14 

数据样本:

  NEb2b9sYXgod6mTvaRv + MRsTJvIiTTI9VjnDGcxjxcN5qBH7FXvxYI6Oj16FeKKsoQvjAmdju2SQ 
ifJqPJTl97xeEbjdwm + W8XJnWs99ku85EznVBhzQxI1H2jPiZIcrqIVCWdd / OQun7AjK4w2 + 5yb7
DPN2OiCIEOz2zK6skJrBw3oTEHpXrSEhydOYxqI + c5hC4z3k5nktN6WSVLIo8EAjwenHPMDxboWF
ET8R + QM5EznVBhzQxI1H2jPiZIcrqIVCWdd / OQun7AjK4w2 + 5yb7DPN2OiCIFqk4LRwEVq16jvKE
vjz6T4 / G34kx6CEx / JdZ1LdvxC3xYQIcwS0wVnmtxorFm4q5QQFHzNKQ5chrGZzDkFzAogsZ2l2B
vcvlwgajNGHmxuVU83Ldn1e5rin7QqpjASqeDGFQHkiSbp4x6axVce2OGgfFpZdzCM7y6jLPpOlX
LOC / Bs1vTwMzcBNRB / Fo4nsX9i4It8Spm228XQNUpQe4i9QGe / 4AyKIhHoM8DkXwPZ6rWp0W0UMe
keXjg41cED1JwjAAQSP3RYITB78bu + CEZKPOt2tQ2BvSw55mnFcvjIAYVQxCHliQ4PwgceHrnsZz
5aagC0QJ3oOKw9O0dlkVE3IM6KTBMcuZOZF19nCqxMFacQoDxjJY8tOJoN0Fe4Boz2FPyuggfLz9
yhljVJhxqOlTd8eA34Ex8SdC + 5NDByAMumjzcPc XL8YVpSN85gytfd + skXhz3npmJ0dmZZOouu0Z
vMmlaCqw96Sy0L1mHLKbjqmZ / W57OBNRB / Fo4nsX9i4It8Spm228XQNUpQe4i9QGe / 4AyKIhHoM8
DkXwPZ5tXdq1dRG6IaS51oNzFFlOoP3wTJuOTpj + zQOBMMOi4ENFyyEwYbG / qE时+ uY8rVwBOUHv9b
Yd9byvOZbnHDuf4oaWRZ + 4K3s2NkEblDF9wU6Mb0ZqnLEJsypjrorH1cNIodIDu8nME1nD5bIDF6
XNrWC6pk6AV6eYQvNJw2QDz0RBD15fz / fAXCvbaCLDnhBKpLXrRbQdV + jxx2ipeC2ceMLLRFRPuR
B + ycYht65lWh4jNjoEsBXGFKiT0bSX6Lx / ZQD3twJWbML8ifRhw7SW0jOkUF + dAfXYNaD6nqA6Xq
TkcsDGaJsVq8wwCIWNh6tDRSw7ba4c391147kmnqEgXdKmmnEzUfHtpRw88C0 / u0qj809hB4qB0B
LXJ / 87aDo4VOz9S4jjtk849CxtA / A9 + 532A4YlXjsPt / f0KZ2drAGEr1VSWzaLh / sMwP5tznmPaK
uozS6C​​74gMNdhtNMFz0HONcYecS0hg4lrdRyljROgzC33QoBIHbQXJrG0OXE3 + 81uhJwusEnFaD9
8Eybjk6YeNk3oxL3C5fx / xXgFmhcLLGdxRe / am0jqA1gV6MyQFUKtzdnNOUYpHkYXT9Ea7YYln4Q
D96Z9AI5EznVBhzQxI1H2jPiZIcrqIVCWdd / OQun7AjK4w2 + 5yb7DPN2OiCIFqk4LRwEVq16jvKE
vjz6T4 / G34kx6CEx / JdZ1LdvxC3iEcYTrEH9kKhPrmPK1cATlB7 / W2HfW8rzmW5xw7n + KGlkWfuC
t7NjZBG5QxfcFOjG9GapyxCbMqY66Kx9XDSKHSA7vJzBNZw + WyAxelz a1guqZOgFenmElSgtUOo7
TEunuphaMIEQgo0udojG6dm2FtRmA4yntNCnCDzGTY72nrFBz3EZmVXGEm6X3Xd5Ito =


解决方案



如下:



解密

  def read_key(key_file)
File.read(key_file).split(',')。 x.to_i} .pack('c *')
end
des = OpenSSL :: Cipher :: Cipher.new('des-ede3')
des.decrypt
des.key = read_key('key.bin')

result = des.update(decode)+ des.final

加密

  def read_key(key_file)
File.read(key_file).split(',')。map {| x | x.to_i} .pack('c *')
end
des2 = OpenSSL :: Cipher :: Cipher.new('des-ede3')
des2.encrypt
des2.key = read_key('key.bin')

result = des2.update(result)+ des2.final
puts Base64.encode64(result)


I have a key.bin file which content is something along the lines of:

-12, 110, 93, 14, -48, ...

This is being used by a service to decrypt 3DES content, but I need to encrypt it via Ruby.

I've tried loads of scenarios with how to set the key and what to do with it, but to no avail as of yet:

  • Tried splitting the key by , and converting each number to hex, concatenating the hex values to make the key
  • Tried converting the number string to binary
  • Tried converting the resulting hex to binary

I assume what I need to do is something simple like:

des = OpenSSL::Cipher::Cipher.new('des3')
des.decrypt
des.key = mistery # this step is where i'm having problems at
final = des.update(encrypted) + des.final

Any ideas on what I should do with this key?

Key sample:

-62,-53,124,-110,37,-88,-48,31,-57,93,70,-101,44,69,-88,-57,-123,-99,118,-119,110,55,11,14

Data sample:

NEb2b9sYXgod6mTvaRv+MRsTJvIiTTI9VjnDGcxjxcN5qBH7FXvxYI6Oj16FeKKsoQvjAmdju2SQ
ifJqPJTl97xeEbjdwm+W8XJnWs99ku85EznVBhzQxI1H2jPiZIcrqIVCWdd/OQun7AjK4w2+5yb7
DPN2OiCIEOz2zK6skJrBw3oTEHpXrSEhydOYxqI+c5hC4z3k5nktN6WSVLIo8EAjwenHPMDxboWF
ET8R+QM5EznVBhzQxI1H2jPiZIcrqIVCWdd/OQun7AjK4w2+5yb7DPN2OiCIFqk4LRwEVq16jvKE
vjz6T4/G34kx6CEx/JdZ1LdvxC3xYQIcwS0wVnmtxorFm4q5QQFHzNKQ5chrGZzDkFzAogsZ2l2B
vcvlwgajNGHmxuVU83Ldn1e5rin7QqpjASqeDGFQHkiSbp4x6axVce2OGgfFpZdzCM7y6jLPpOlX
LOC/Bs1vTwMzcBNRB/Fo4nsX9i4It8Spm228XQNUpQe4i9QGe/4AyKIhHoM8DkXwPZ6rWp0W0UMe
keXjg41cED1JwjAAQSP3RYITB78bu+CEZKPOt2tQ2BvSw55mnFcvjIAYVQxCHliQ4PwgceHrnsZz
5aagC0QJ3oOKw9O0dlkVE3IM6KTBMcuZOZF19nCqxMFacQoDxjJY8tOJoN0Fe4Boz2FPyuggfLz9
yhljVJhxqOlTd8eA34Ex8SdC+5NDByAMumjzcPcXL8YVpSN85gytfd+skXhz3npmJ0dmZZOouu0Z
vMmlaCqw96Sy0L1mHLKbjqmZ/W57OBNRB/Fo4nsX9i4It8Spm228XQNUpQe4i9QGe/4AyKIhHoM8
DkXwPZ5tXdq1dRG6IaS51oNzFFlOoP3wTJuOTpj+zQOBMMOi4ENFyyEwYbG/qE+uY8rVwBOUHv9b
Yd9byvOZbnHDuf4oaWRZ+4K3s2NkEblDF9wU6Mb0ZqnLEJsypjrorH1cNIodIDu8nME1nD5bIDF6
XNrWC6pk6AV6eYQvNJw2QDz0RBD15fz/fAXCvbaCLDnhBKpLXrRbQdV+jxx2ipeC2ceMLLRFRPuR
B+ycYht65lWh4jNjoEsBXGFKiT0bSX6Lx/ZQD3twJWbML8ifRhw7SW0jOkUF+dAfXYNaD6nqA6Xq
TkcsDGaJsVq8wwCIWNh6tDRSw7ba4c391147kmnqEgXdKmmnEzUfHtpRw88C0/u0qj809hB4qB0B
lxj/87aDo4VOz9S4jjtk849CxtA/a9+532A4YlXjsPt/f0KZ2drAGEr1VSWzaLh/sMwP5tznmPaK
uozS6C74gMNdhtNMFz0HONcYecS0hg4lrdRyljROgzC33QoBIHbQXJrG0OXE3+81uhJwusEnFaD9
8Eybjk6YeNk3oxL3C5fx/xXgFmhcLLGdxRe/am0jqA1gV6MyQFUKtzdnNOUYpHkYXT9Ea7YYln4Q
D96Z9AI5EznVBhzQxI1H2jPiZIcrqIVCWdd/OQun7AjK4w2+5yb7DPN2OiCIFqk4LRwEVq16jvKE
vjz6T4/G34kx6CEx/JdZ1LdvxC3iEcYTrEH9kKhPrmPK1cATlB7/W2HfW8rzmW5xw7n+KGlkWfuC
t7NjZBG5QxfcFOjG9GapyxCbMqY66Kx9XDSKHSA7vJzBNZw+WyAxelza1guqZOgFenmElSgtUOo7
TEunuphaMIEQgo0udojG6dm2FtRmA4yntNCnCDzGTY72nrFBz3EZmVXGEm6X3Xd5Ito=

解决方案

Got it working!

Here's how:

Decryption

def read_key(key_file)
  File.read(key_file).split(',').map { |x| x.to_i }.pack('c*')
end
des = OpenSSL::Cipher::Cipher.new('des-ede3')
des.decrypt
des.key = read_key('key.bin')

result = des.update(decoded) + des.final

Encryption

def read_key(key_file)
  File.read(key_file).split(',').map { |x| x.to_i }.pack('c*')
end
des2 = OpenSSL::Cipher::Cipher.new('des-ede3')
des2.encrypt
des2.key = read_key('key.bin')

result = des2.update(result) + des2.final
puts Base64.encode64(result)

这篇关于在Ruby中加密/解密3DES的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆