c# – Ruby和Dot net之间的加密 – 解密
发布时间:2020-12-15 21:20:28 所属栏目:百科 来源:网络整理
导读:我需要tyhe dot net相当于以下代码.问题是,我在客户端使用 Ruby加密,这里是代码. 编码的字符串将传递给C#Web服务.那必须解密字符串. 如果有人可以提供与此代码等效的点网,那么它将会有所帮助. require 'rubygems'require 'ezcrypto'require 'crypt/rijndael'
|
我需要tyhe dot net相当于以下代码.问题是,我在客户端使用
Ruby加密,这里是代码.
编码的字符串将传递给C#Web服务.那必须解密字符串. 如果有人可以提供与此代码等效的点网,那么它将会有所帮助. require 'rubygems'
require 'ezcrypto'
require 'crypt/rijndael'
plaintext = '24.9195N 17.821E'
aes_key = Crypt::Rijndael.new('0123456789abcdef0123456789abcdef')
aes_cyphertext = aes_key.encrypt_string(plaintext)
print "n"
print aes_cyphertext +"n"
print Base64.encode64(aes_cyphertext)
print "n"
print aes_key.decrypt_string(aes_cyphertext)
print "n"
解决方法
它将类似于下面显示的代码作为单元测试.第一部分进行加密 – 后半部分进行加密.
将代码粘贴到新的MSTest单元测试(创建新测试项目或添加到现有测试项目). 键和iv是您需要相应设置的. //needed to convert from hex string
public static byte[] FromHexString(string hexString)
{
int NumberChars = hexString.Length;
byte[] bytes = new byte[NumberChars / 2];
for (int i = 0; i < NumberChars; i += 2)
bytes[i / 2] = Convert.ToByte(hexString.Substring(i,2),16);
return bytes;
}
[TestMethod]
public void Test()
{
string toEncryptString = "24.9195N 17.821E";
//initialise key and IV (note - all zero IV is not recommended!)
byte[] key = FromHexString("0123456789abcdef0123456789abcdef");
byte[] iv = FromHexString("00000000000000000000000000000000");
byte[] toEncrypt = System.Text.Encoding.UTF8.GetBytes(toEncryptString);
byte[] cipherBytes = null;
string cipherText = null;
//encrypt
using (System.Security.Cryptography.Rijndael r = new RijndaelManaged())
{
r.Key = key;
r.IV = iv;
using(System.Security.Cryptography.ICryptoTransform transform
= r.CreateEncryptor())
{
using (var mStream = new System.IO.MemoryStream())
{
using (var cStream =
new CryptoStream(mStream,transform,CryptoStreamMode.Write))
{
cStream.Write(toEncrypt,toEncrypt.Length);
cStream.FlushFinalBlock();
cipherBytes = mStream.ToArray();
cipherText = Convert.ToBase64String(cipherBytes);
}
}
}
}
//decrypt
byte[] toDecrypt = Convert.FromBase64String(cipherText);
string decryptedString = null;
using (System.Security.Cryptography.Rijndael r = new RijndaelManaged())
{
r.Key = key;
r.IV = iv;
using(System.Security.Cryptography.ICryptoTransform transform2
= r.CreateDecryptor()) // <-- difference here
{
using (var mStream2 = new System.IO.MemoryStream())
{
using (var cStream2 =
new CryptoStream(mStream2,transform2,CryptoStreamMode.Write))
{
cStream2.Write(toDecrypt,toDecrypt.Length);
cStream2.FlushFinalBlock();
decryptedString =
System.Text.Encoding.UTF8.GetString(mStream2.ToArray());
}
}
}
}
Assert.AreEqual(toEncryptString,decryptedString);
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
