首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用Ruby实现SJCL AES-128-CCM解密

用Ruby实现SJCL AES-128-CCM解密
EN

Stack Overflow用户
提问于 2013-04-16 10:28:29
回答 1查看 1.4K关注 0票数 9

我正在尝试用Ruby实现aes-128-ccm加密字符串的SJCL解密。在阅读similar question之后,我发现新版本的OpenSSL库应该支持这一点,因此我已经将github的开发版本安装到了/opt上

这样做之后,当我运行/opt/bin/openssl ciphers时,我在列表中看不到aes-128-ccm密码:

代码语言:javascript
复制
ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-SHA384:ECDHE-ECDSA-AES256-SHA384:ECDHE-RSA-AES256-SHA:ECDHE-ECDSA-AES256-SHA:SRP-DSS-AES-256-CBC-SHA:SRP-RSA-AES-256-CBC-SHA:DH-DSS-AES256-GCM-SHA384:DHE-DSS-AES256-GCM-SHA384:DH-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES256-SHA256:DHE-DSS-AES256-SHA256:DH-RSA-AES256-SHA256:DH-DSS-AES256-SHA256:DHE-RSA-AES256-SHA:DHE-DSS-AES256-SHA:DH-RSA-AES256-SHA:DH-DSS-AES256-SHA:DHE-RSA-CAMELLIA256-SHA:DHE-DSS-CAMELLIA256-SHA:DH-RSA-CAMELLIA256-SHA:DH-DSS-CAMELLIA256-SHA:ECDH-RSA-AES256-GCM-SHA384:ECDH-ECDSA-AES256-GCM-SHA384:ECDH-RSA-AES256-SHA384:ECDH-ECDSA-AES256-SHA384:ECDH-RSA-AES256-SHA:ECDH-ECDSA-AES256-SHA:AES256-GCM-SHA384:AES256-SHA256:AES256-SHA:CAMELLIA256-SHA:PSK-AES256-CBC-SHA:ECDHE-RSA-DES-CBC3-SHA:ECDHE-ECDSA-DES-CBC3-SHA:SRP-DSS-3DES-EDE-CBC-SHA:SRP-RSA-3DES-EDE-CBC-SHA:EDH-RSA-DES-CBC3-SHA:EDH-DSS-DES-CBC3-SHA:DH-RSA-DES-CBC3-SHA:DH-DSS-DES-CBC3-SHA:ECDH-RSA-DES-CBC3-SHA:ECDH-ECDSA-DES-CBC3-SHA:DES-CBC3-SHA:PSK-3DES-EDE-CBC-SHA:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-SHA256:ECDHE-ECDSA-AES128-SHA256:ECDHE-RSA-AES128-SHA:ECDHE-ECDSA-AES128-SHA:SRP-DSS-AES-128-CBC-SHA:SRP-RSA-AES-128-CBC-SHA:DH-DSS-AES128-GCM-SHA256:DHE-DSS-AES128-GCM-SHA256:DH-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES128-SHA256:DHE-DSS-AES128-SHA256:DH-RSA-AES128-SHA256:DH-DSS-AES128-SHA256:DHE-RSA-AES128-SHA:DHE-DSS-AES128-SHA:DH-RSA-AES128-SHA:DH-DSS-AES128-SHA:DHE-RSA-SEED-SHA:DHE-DSS-SEED-SHA:DH-RSA-SEED-SHA:DH-DSS-SEED-SHA:DHE-RSA-CAMELLIA128-SHA:DHE-DSS-CAMELLIA128-SHA:DH-RSA-CAMELLIA128-SHA:DH-DSS-CAMELLIA128-SHA:ECDH-RSA-AES128-GCM-SHA256:ECDH-ECDSA-AES128-GCM-SHA256:ECDH-RSA-AES128-SHA256:ECDH-ECDSA-AES128-SHA256:ECDH-RSA-AES128-SHA:ECDH-ECDSA-AES128-SHA:AES128-GCM-SHA256:AES128-SHA256:AES128-SHA:SEED-SHA:CAMELLIA128-SHA:IDEA-CBC-SHA:PSK-AES128-CBC-SHA:ECDHE-RSA-RC4-SHA:ECDHE-ECDSA-RC4-SHA:ECDH-RSA-RC4-SHA:ECDH-ECDSA-RC4-SHA:RC4-SHA:RC4-MD5:PSK-RC4-SHA:EDH-RSA-DES-CBC-SHA:EDH-DSS-DES-CBC-SHA:DH-RSA-DES-CBC-SHA:DH-DSS-DES-CBC-SHA:DES-CBC-SHA:EXP-EDH-RSA-DES-CBC-SHA:EXP-EDH-DSS-DES-CBC-SHA:EXP-DH-RSA-DES-CBC-SHA:EXP-DH-DSS-DES-CBC-SHA:EXP-DES-CBC-SHA:EXP-RC2-CBC-MD5:EXP-RC4-MD5

但是如果我运行/opt/bin/openssl enc -help 2>&1,我会看到"-aes-128-ccm":

代码语言:javascript
复制
-aes-128-cbc               -aes-128-ccm               -aes-128-cfb              
-aes-128-cfb1              -aes-128-cfb8              -aes-128-ctr              
-aes-128-ecb               -aes-128-gcm               -aes-128-ofb              
-aes-128-xts               -aes-192-cbc               -aes-192-ccm              
-aes-192-cfb               -aes-192-cfb1              -aes-192-cfb8             
-aes-192-ctr               -aes-192-ecb               -aes-192-gcm              
-aes-192-ofb               -aes-256-cbc               -aes-256-ccm              
-aes-256-cfb               -aes-256-cfb1              -aes-256-cfb8             
-aes-256-ctr               -aes-256-ecb               -aes-256-gcm              
-aes-256-ofb               -aes-256-xts               -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                  -gost89                    -gost89-cnt               
-id-aes128-CCM             -id-aes128-GCM             -id-aes192-CCM            
-id-aes192-GCM             -id-aes256-CCM             -id-aes256-GCM            
-idea                      -idea-cbc                  -idea-cfb                 
-idea-ecb                  -idea-ofb                  -rc2                      
-rc2-40-cbc                -rc2-64-cbc                -rc2-cbc                  
-rc2-cfb                   -rc2-ecb                   -rc2-ofb                  
-rc4                       -rc4-40                    -rc4-hmac-md5             
-seed                      -seed-cbc                  -seed-cfb                 
-seed-ecb                  -seed-ofb           

我使用rvm重新安装了ruby2.0.0p0,命令是:rvm reinstall 2.0.0 --with-openssl-dir=/opt (在前面的文章中给出)。然后运行了cipher = OpenSSL::Cipher.new('aes-128-ccm')。这返回了以下错误:

代码语言:javascript
复制
unsupported cipher algorithm (aes-128-ccm)

我的问题是如何在Ruby中添加对AES-128-CCM的支持/我做错了什么?

EN

回答 1

Stack Overflow用户

发布于 2013-08-08 21:44:33

好的,我已经成功了,下面是我所做的:

首先从github获取OpenSSL源代码

代码语言:javascript
复制
$ git clone https://github.com/openssl/openssl.git
$ cd openssl/

如果您想要与我使用的完全相同的版本,请执行以下操作:

代码语言:javascript
复制
$ git checkout 5ae8d6bcbaff99423a2608559d738a3fcf7ed6dc -b tmp

现在使用某个目录中的共享库构建OpenSSL:

代码语言:javascript
复制
$ ./config shared --prefix=/home/jbr/local/openssl
$ make depend
$ make
$ make install

确保您拥有ccm-support:

代码语言:javascript
复制
$ /home/jbr/local/openssl/bin/openssl enc -help  2>&1 | grep "ccm"
-aes-128-ccm               -aes-128-cfb               -aes-128-cfb1             
-aes-192-cbc               -aes-192-ccm               -aes-192-cfb              
-aes-256-ccm               -aes-256-cfb               -aes-256-cfb1   

好的,现在使用rvm和新版本的OpenSSL安装一个命名的Ruby:

代码语言:javascript
复制
$ rvm install ruby-2.0.0-p195 -n ccm --with-openssl-dir=/home/jbr/local/openssl

此命令将为您提供一个使用新OpenSSL库的Ruby2.0.0patch level 195版本,该版本使用了-ccm。

现在使用新版本的Ruby:

代码语言:javascript
复制
$ rvm use ruby-2.0.0-p195-ccm

并使用irb进行测试:

代码语言:javascript
复制
$ irb
2.0.0p195 :001 > require 'openssl'
 => true
2.0.0p195 :005 > OpenSSL::Cipher.ciphers.include? "aes-128-ccm"
 => true 

现在您有了aes-128-ccm。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16027778

复制
相关文章

相似问题

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