看了各位的发言,很受启发。
1,以前一直 linux,正在试用,估计到最后也会买 mac
ruby-oci8 是根据你的库进行动态编译的,所以只要你用的 oracle client 库是 64bit 的,编译出来的也是 64bit 的。看最后一部分,ruby-oci8 用到了 libclntsh.dylib 这个库。另外,你可以看看 sdk 里面的文件就比较明白了,那里有很多头文件等。
继续支持!
虽然有老婆了,但还是进来养养眼,呵呵。
看了前半部分感动了一把,看了后半部分气愤了一把。
楼主文采还行,继续。
给出解决后的最终代码,供以后有此疑问的同学参考学习: HTML 代码
<a id="btnSearch" class="mini-button">查询</a>
CoffeeScript 代码
jQuery ->
# 定义要绑定的函数
search = ->
key = mini.get("key").getValue()
if key isnt ""
grid.load {key: key}
else
alert "请输入要查询的内容!"
# 将要特定的功能函数绑定到相应的DOM中去
$('#btnSearch').click =>
search()
#2 楼 @jiyinyiyong 谢谢你的建议。
呵呵,楼主是给闺女还是给自己玩啊 B-)
+1
恭喜!你翻译的版本对我帮助很大,谢谢!
你数据查询一直都是 Girl.all,返回的当然是全部数据。如果要分页,controller 中要做些处理啊!
呵呵,同问,最近也被 sinatra 的简洁所吸引了。
谢谢,google 了下,选择也很多,正在试。
非常好的 Ruby IDE,价格不贵。
问题解决了!不是出在密钥转化和加密程序上,而是出在我调用 WebService 的参数传递上,Soap4r 对于 xml 格式的参数进行转码!把其中的<
>
符号转成了<
和>
,不给力啊!没办法就换成了 Savon 这个 gem,下面是重新整理后的代码:
require 'openssl'
require 'Base64'
require 'xml/libxml'
def rsa_encrypt(public_key, message_string)
Base64.strict_encode64(public_key.public_encrypt(message_string.encode('UTF-16LE')))
# 这个写法也是可以的
#Base64.encode64(public_key.public_encrypt(message_string.encode('UTF-16LE'))).rstrip
end
# @param xml_string [Object]
# @return [Object]
def rsa_public_key(xml_string)
d = XML::Parser.string(xml_string).parse
m = Base64.decode64(d.find_first('Modulus').content)
e = Base64.decode64(d.find_first('Exponent').content)
pub_key = OpenSSL::PKey::RSA.new
#modulues
pub_key.n = OpenSSL::BN.new m, 2
#exponent
pub_key.e = OpenSSL::BN.new e, 2
#return Public Key
pub_key
end
# @param xml_string [Object]
# @return [Object]
def rsa_public_key1(xml_string)
d = XML::Parser.string(xml_string).parse
m = Base64.decode64(d.find_first('Modulus').content).unpack('H*')
e = Base64.decode64(d.find_first('Exponent').content).unpack('H*')
pub_key = OpenSSL::PKey::RSA.new
#modulues
pub_key.n = OpenSSL::BN.new m[0].hex.to_s
#exponent
pub_key.e = OpenSSL::BN.new e[0].hex.to_s
#return Public Key
pub_key
end
刚才测试了 rsa_public_key 中的 message_string.encode('UTF-16LE') 和 C#中的 byte[] bytes = new UnicodeEncoding().GetBytes(m_strEncryptString); 两者的结果好像也没有什么不同,问题在哪呢?
#9 楼 @luikore 今天在 https://superdry.apphb.com/tools/online-rsa-key-converter 这个网站上,我验证了我通过之前程序和你建议的写法所生成 PEM 格式的 public_key 的一致性,因此可以非常肯定 rsa_public_key 函数结果的正确性。因此,问题就集中在 rsa_encrypt 函数上了。
#1 楼 @limpid 编码问题我已经考虑,对 message_string 进行了 UTF-16LE 格式的 encoding。按我 google 的资料来说 rsa_public_key 部分应该是没问题了(但不是十分肯定),估计是 rsa_encrypt 部分? 其实这个是用ruby来重写下面的C#代码:
/// <summary>
/// RSA加密
/// </summary>
/// <param name="xmlPublicKey">公钥</param>
/// <param name="m_strEncryptString"></param>
/// <returns>RSA公钥加密后的数据</returns>
public static string RSAEncrypt(string xmlPublicKey, string m_strEncryptString)
{
string strEncry="";
try
{
RSACryptoServiceProvider provider = new RSACryptoServiceProvider();
provider.FromXmlString(xmlPublicKey);
byte[] bytes = new UnicodeEncoding().GetBytes(m_strEncryptString);
strEncry = Convert.ToBase64String(provider.Encrypt(bytes, false));
}
catch (Exception exception)
{
throw exception;
}
return strEncry;
}
订购一份支持一下!