瞎扯淡 用 C 生成 ruby 的类库的问题

lionzixuanyuan · 2012年12月10日 · 最后由 lionzixuanyuan 回复于 2012年12月10日 · 3432 次阅读

今天在尝试运用 ruby 的 AES 加密,想要安装 fast-aes 这个插件 http://rubygems.org/gems/fast-aes 但是发现装不上,后来知道这个类库是用 C 写的,但是不会整。 发现@sevk写的几个帖子,其中一篇 http://sevk.iteye.com/blog/688739 看了还是不会整,期望各位懂人指导一下,小弟是在充满争议的 windows 环境下进行开发的。。。

Aes 加密 Ruby 原生库里面就有的

#1 楼 @huacnlee 额,求指导~~ 不过如果有的话,为什么还会出现这个 fast-aes 的插件呢?

而 fast-aes 的话,Github 上面有说明的

This is a lightweight, fast implementation of AES

#4 楼 @huacnlee 我去研究研究,有问题再向你请教

Ruby 自带的是 OpenSSL 的包装,如果你装 Ruby 用的 OpenSSL 是 1.0.1 以上并且 CPU 是 i5 以上,那么已经没法更快了,因为 OpenSSL 会直接用 CPU 的 AES 指令, 比 C 的实现快 8 倍左右

直接调用 CPU 指令,真牛

#7 楼 @sevk 求指导,我看来你的帖子,但是基础太差,还不是很理解,我觉得装了 fast-aes 以后调用比较方便。但是现在插件装不上。。。能不能麻烦你详细说说那个插件怎么装?在执行 creating Makefile 的时候停住了,提示 nmake 不是命令

#6 楼 @luikore 公司的开发环境中的 openssl 是 0.9.8d

@lionzixuanyuan 在 windows 得用 mingw 开命令行编译,(或者你装个 visual studio 就有 nmake 命令了), 这个 gem 存在的原因可能是作者不知道 openssl 而已...

text = 'hello'
key = rand(36**32).to_s(36).ljust(32)
require 'openssl'

# 加密
aes = OpenSSL::Cipher.new 'aes-256-cbc' # 另外还可以选各种 -128 -ecb -ofb 等模式
aes.encrypt
aes.key = key
ctext = aes.update('hello') << aes.final

# 解密
aes = OpenSSL::Cipher.new 'aes-256-cbc'
aes.decrypt
aes.key = key
deciphered_text = aes.update(ctext) << aes.final
text == deciphered_text #=> true

好吧,把你的报错信息发上来看看,估计 gem install fast-aes 就 OK 的。

#10 楼 @luikore 对啊,直接用自带的 require 'openssl' 就 OK,不需要编译。不需要安装任何东东。

安装 vc6.0 或 vs2008 , vs2010 等开发环境,就有 nmake 了, 或安装这个: https://github.com/downloads/oneclick/rubyinstaller/DevKit-tdm-32-4.5.2-20111229-1559-sfx.exe 安装完后,再 gem install 试试,看报什么错。

不过建议你按 10 楼的方法解决,最简单省事。

C:\Documents and Settings\Administrator>irb
irb(main):001:0> require 'openssl'
=> true
irb(main):002:0>

#14 楼 @sevk 嗯,我已经试过了,但是我觉得多学点不是坏事,话说我自己的笔记本上有安装 vs2010,是不是需要设置?

#16 楼 @lionzixuanyuan 运行 vcvars32 看看,有没有反应,我这台没安装 vs , 不知道路径是什么,估计你搜索一下 vcvars32.bat 这个文件就 OK

#17 楼 @sevk 没有搜到这个文件啊

64 位系统是 vcvars64.bat,在 vs2010 的安装目录里的 bin 目录, 找到了: http://www.mongodb.org/display/DOCS/Building+with+Visual+Studio+2010

C:\Program Files (x86)\Microsoft Visual Studio 10.0\Common7\Tools\vsvars32.bat C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\bin\amd64\vcvars64.bat

#19 楼 @sevk 不好意思,刚刚在跟同事争论一个问题。 vcvars64.bat 这个也没有,我的系统是 32 位的,今天太晚了,下班回家了。十分感谢你,方便的话我明天再联系你好吗?

需要 登录 后方可回复, 如果你还没有账号请 注册新账号