首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >OpenSSL接口中的哪个密码等同于DES_ecb2_encrypt()?

OpenSSL接口中的哪个密码等同于DES_ecb2_encrypt()?
EN

Stack Overflow用户
提问于 2013-05-31 08:31:04
回答 2查看 1.2K关注 0票数 0

Ruby中的哪个密码等同于OpenSSL C函数DES_ecb2_encrypt()

我看到以下密码:

代码语言:javascript
复制
 irb(main):003:0> OpenSSL::Cipher.ciphers
 => ["AES-128-CBC", "AES-128-CFB", "AES-128-CFB1", "AES-128-CFB8", "AES-128-ECB", 
     "AES-128-OFB", "AES-192-CBC", "AES-192-CFB", "AES-192-CFB1", "AES-192-CFB8", 
     "AES-192-ECB", "AES-192-OFB", "AES-256-CBC", "AES-256-CFB", "AES-256-CFB1", 
     "AES-256-CFB8", "AES-256-ECB", "AES-256-OFB", "AES128", "AES192", "AES256", 
     "BF", "BF-CBC", "BF-CFB", "BF-ECB", "BF-OFB", "CAMELLIA-128-CBC", "CAMELLIA-128-CFB",
     "CAMELLIA-128-CFB1", "CAMELLIA-128-CFB8", "CAMELLIA-128-ECB", "CAMELLIA-128-OFB",
     "CAMELLIA-192-CBC", "CAMELLIA-192-CFB", "CAMELLIA-192-CFB1", "CAMELLIA-192-CFB8",
     "CAMELLIA-192-ECB", "CAMELLIA-192-OFB", "CAMELLIA-256-CBC", "CAMELLIA-256-CFB",
     "CAMELLIA-256-CFB1", "CAMELLIA-256-CFB8", "CAMELLIA-256-ECB", "CAMELLIA-256-OFB",
     "CAMELLIA128", "CAMELLIA192", "CAMELLIA256", "CAST", "CAST-cbc", "CAST5-CBC", 
     "CAST5-CFB", "CAST5-ECB", "CAST5-OFB", "DES", "DES-CBC", "DES-CFB", "DES-CFB1", 
     "DES-CFB8", "DES-ECB", "DES-EDE", "DES-EDE-CBC", "DES-EDE-CFB", "DES-EDE-OFB", 
     "DES-EDE3", "DES-EDE3-CBC", "DES-EDE3-CFB", "DES-EDE3-CFB1", "DES-EDE3-CFB8", 
     "DES-EDE3-OFB", "DES-OFB", "DES3", "DESX", "DESX-CBC", "RC2", "RC2-40-CBC", 
     "RC2-64-CBC", "RC2-CBC", "RC2-CFB", "RC2-ECB", "RC2-OFB", "RC4", "RC4-40", "SEED",
     "SEED-CBC", "SEED-CFB", "SEED-ECB", "SEED-OFB", "aes-128-cbc", "aes-128-cfb", 
     "aes-128-cfb1", "aes-128-cfb8", "aes-128-ecb", "aes-128-ofb", "aes-192-cbc", 
     "aes-192-cfb", "aes-192-cfb1", "aes-192-cfb8", "aes-192-ecb", "aes-192-ofb", 
     "aes-256-cbc", "aes-256-cfb", "aes-256-cfb1", "aes-256-cfb8", "aes-256-ecb", 
     "aes-256-ofb", "aes128", "aes192", "aes256", "bf", "bf-cbc", "bf-cfb", "bf-ecb", 
     "bf-ofb", "blowfish", "camellia-128-cbc", "camellia-128-cfb", "camellia-128-cfb1",
     "camellia-128-cfb8", "camellia-128-ecb", "camellia-128-ofb", "camellia-192-cbc",
     "camellia-192-cfb", "camellia-192-cfb1", "camellia-192-cfb8", "camellia-192-ecb",
     "camellia-192-ofb", "camellia-256-cbc", "camellia-256-cfb", "camellia-256-cfb1",
     "camellia-256-cfb8", "camellia-256-ecb", "camellia-256-ofb", "camellia128",
     "camellia192", "camellia256", "cast", "cast-cbc", "cast5-cbc", "cast5-cfb", 
     "cast5-ecb", "cast5-ofb", "des", "des-cbc", "des-cfb", "des-cfb1", "des-cfb8", 
     "des-ecb", "des-ede", "des-ede-cbc", "des-ede-cfb", "des-ede-ofb", "des-ede3", 
     "des-ede3-cbc", "des-ede3-cfb", "des-ede3-cfb1", "des-ede3-cfb8", "des-ede3-ofb",
     "des-ofb", "des3", "desx", "desx-cbc", "rc2", "rc2-40-cbc", "rc2-64-cbc", "rc2-cbc",
     "rc2-cfb", "rc2-ecb", "rc2-ofb", "rc4", "rc4-40", "seed", "seed-cbc", "seed-cfb",
     "seed-ecb", "seed-ofb"]

我基本上需要Ruby在C中调用此函数的等价物:

代码语言:javascript
复制
 DES_ecb2_encrypt((const_DES_cblock *)data, (DES_cblock *)data, &des_key1, &des_key2, 1);
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-06-15 06:25:07

我不想在这里回答我自己的问题,但我找到了解决方案。

我有一段加密的数据,是用这个C代码加密的:

代码语言:javascript
复制
  DES_ecb3_encrypt(input,output, key1, key2, key1, 1) 

根据Tripple-DES文档,它可以做到这一点:

代码语言:javascript
复制
  cipher_text =Encrypt(key1,Decrypt(key2,Encrypt(key1,plain_text)))

为了解码Ruby语言中的cipher_text,我这样做了:

代码语言:javascript
复制
  decrypt.OpenSSL::Cipher::Cipher.new('des-ede3')
  decrypt.decrypt
  decrypt.key = key1 + key2 + key1 
  plain_text = decrypt(cipher_text)  #  gives correct result, but decrypt.final gives errors

  # plain_text = decrypt(cipher_text) + decrypt.final # DOES NOT WORK
  #  => OpenSSL::Cipher::CipherError: wrong final block length   ; WHY??

如果有人能发表评论,我将不胜感激:

  • 为什么decypt.final会导致错误,尽管结果是正确的
票数 0
EN

Stack Overflow用户

发布于 2013-05-31 11:22:42

我从来没有用过这种方法,但它看起来像是使用des_key1作为最终加密的2密钥3DES加密,而不是第三个密钥。这是3DES的keying option 2。看起来选项des-ede可能会做您想要的事情。

代码语言:javascript
复制
encrypt = OpenSSL::Cipher::Cipher.new("des-ede")
encrypt.encrypt
encrypt.key= des_key1+des_key2
ct = encrypt.update(plain_text) + encrypt.final

当然还有解密

代码语言:javascript
复制
decrypt = OpenSSL::Cipher::Cipher.new("des-ede")
decrypt.decrypt
decrypt.key= des_key1+des_key2
pt = decrypt.update(ct) + decrypt.final
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16848035

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档