gpt4 book ai didi

c# - Ruby和Dot net之间的加解密

转载 作者:数据小太阳 更新时间:2023-10-29 07:38:32 24 4
gpt4 key购买 nike

我需要与以下代码等效的 tyhe dot net。问题是,我在客户端使用 Ruby 进行加密,这是代码。编码后的字符串将传递给 C# Web 服务。那必须解密字符串。

如果有人可以提供此代码的 dot net 等价物,那将会很有帮助。

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 单元测试中(创建新测试项目或添加到现有测试项目)。

key 和 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, 0, 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, 0, toDecrypt.Length);
cStream2.FlushFinalBlock();
decryptedString =
System.Text.Encoding.UTF8.GetString(mStream2.ToArray());
}
}
}
}

Assert.AreEqual(toEncryptString, decryptedString);
}

关于c# - Ruby和Dot net之间的加解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6570968/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com