One*_*HOT 6 c# ruby encryption openssl rsa
我有一个简单的Ruby脚本,用于在某些HTTP头上执行private_encrypt以签署要发送到ruby REST API的Web请求,API根据它生成的Base64编码字符串测试Base64编码的字符串,而不是解码Base64并解密数据然后测试原始字符串.
我正在使用的脚本是
require "openssl"
require "base64"
path_to_cert = ARGV[0].dup
plain_text = Base64.decode64(ARGV[1].dup)
private_key = OpenSSL::PKey::RSA.new(File.read(path_to_cert))
puts Base64.encode64(private_key.private_encrypt(plain_text))
Run Code Online (Sandbox Code Playgroud)
输入是Base64编码的事实纯粹是由于输入参数中的换行符和空格.
要使用这个,我不得不使用System.Diagnostics.Process shell并发布ruby并捕获StdOut,虽然这不是一个主要的问题,并且工作我想删除对ruby的依赖但我无法重现输出使用C#RsaCryptoServiceProvider.
如果我Base64使用ruby编码"SimpleString"的private_encrypt结果我一直得到
auReJzoPSW3AhzsfT3EH4rD7lc4y2CJ026xIOiV6kjl2OKIj8GnzrPosoJDg \nSHrvLVKrSxYlegYgJRMx + vaAHSAm7RXrZh5An2SnVuO3qITa2TJ78hTc3bAw \nCDm4i9/4qictjxEFfnPRe6 EYCa4b3dnM5moa1eo9zbQPBa1eS6ItRCX4C0G0 \n1tJpQsEvuums363eAhTUAYa6yEWuINLPmE0USW6jfFNnsxw8Nv9SnC + ziomb\N/mwlt9dS5/mzKM8yFMH6hdQYLoqc0QpjT + xaZ1ZyJ6dG5MVG h3JtjIVRTOSd\N + PUU/BO + obEHbrftG8u2uJImLSA +/1e8aapHaa3WNg ==
使用.Net时
RsaCryptoServiceProvider.Encrypt("SimpleString", false)
Run Code Online (Sandbox Code Playgroud)
由于使用公钥加密,结果始终是不同的输出.
我也试过了
RsaCryptoServiceProvider.SignData
Run Code Online (Sandbox Code Playgroud)
虽然这总是产生相同的结果,但它与红宝石的结果不同.
我可以直接从.Net使用一些CryptoAPI,这样我可以获得与Ruby相同的结果吗?
小智 -1
您可以使用私钥进行加密。
这里至少有一个这样做的例子:
http://www.csharpbydesign.com/2008/04/asymmetry-key-encryption-with.html
请注意在进行加密时使用 PrivateKey 属性(尽管本文引用了解密,但您也可以对加密执行相同的操作)