rsa算法 c#语言,C#实现RSA算法加密解密、签名以及签名的验证

正 文:

我们来看在C#中如何实现RSA加密解密。直接上代码,如下类是RSA算法实现的加密,加解密,签名以及签名的验证。

我们封装了以下的这个RSA类:using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Security.Cryptography;

using System.IO;

namespace WebsiteXXX_Auth

{

/// 

/// 类名:RSACrypt

/// 功能:RSA加密、解密、签名、验签

/// 

public sealed class RSACrypt

{

/// 

/// 签名

/// 

/// 待签名字符串

/// 私钥

/// 编码格式

/// 签名后字符串

public static string sign(string content, string privateKey, string input_charset)

{

byte[] Data = Encoding.GetEncoding(input_charset).GetBytes(content);

RSACryptoServiceProvider rsa = DecodePemPrivateKey(privateKey);

SHA1 sh = new SHA1CryptoServiceProvider();

byte[] signData = rsa.SignData(Data, sh);

return Convert.ToBase64String(signData);

}

/// 

/// 验签

/// 

/// 待验签字符串

/// 签名

/// 公钥

/// 编码格式

/// true(通过),false(不通过)

public static bool verify(string content, string signedString, string publicKey, string input_charset)

{

bool result = false;

byte[] Data = Encoding.GetEncoding(input_charset).GetBytes(content);

byte[] data = Convert.FromBase64String(signedString);

RSAParameters paraPub = ConvertFromPublicKey(publicKey);

RSACryptoServiceProvider rsaPub = new RSACryptoServiceProvider();

rsaPub.ImportParameters(paraPub);

SHA1 sh = new SHA1CryptoServiceProvider();

result = rsaPub.VerifyData(Data, sh, data);

return result;

}

/// 

/// 加密

/// 

/// 需要加密的字符串

/// 公钥

/// 编码格式

/// 明文

public static string encryptData(string resData, string publicKey, string input_charset)

{

byte[] DataToEncrypt = Encoding.ASCII.GetBytes(resData);

string result = encrypt(DataToEncrypt, publicKey, input_charset);

return result;

}

/// 

/// 解密

/// 

/// 加密字符串

/// 私钥

/// 编码格式

/// 明文

public static string decryptData(string resData, string privateKey, string input_charset)

{

byte[] DataToDecrypt = Convert.FromBase64String(resData);

string result = "";

for (int j = 0; j 

{

byte[] buf = new byte[128];

for (int i = 0; i 

{

buf[i] = DataToDecrypt[i + 128 * j];

}

result += decrypt(buf, privateKey, input_charset);

}

return result;

}

private static string encrypt(byte[] data, string publicKey, string input_charset)

{

RSACryptoServiceProvider rsa = DecodePemPublicKey(publicKey);

SHA1 sh = new SHA1CryptoServiceProvider();

byte[] result = rsa.Encrypt(data, false);

return Convert.ToBase64String(result);

}

private static string decrypt(byte[] data, string privateKey, string input_charset)

{

string result = "";

RSACryptoServiceProvider rsa = DecodePemPrivateKey(privateKey);

SHA1 sh = new SHA1CryptoServiceProvider();

byte[] source = rsa.Decrypt(data, false);

ch

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,针对您的问题,我可以给您提供一些参考。 DES算法加密解密示例代码: ```csharp using System; using System.IO; using System.Security.Cryptography; public class DESExample { private static readonly byte[] Key = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; private static readonly byte[] IV = new byte[] { 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08 }; public static void EncryptFile(string inputFilePath, string outputFilePath) { using var des = new DESCryptoServiceProvider(); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); des.Key = Key; des.IV = IV; using var encryptor = des.CreateEncryptor(); using var cryptoStream = new CryptoStream(outputStream, encryptor, CryptoStreamMode.Write); inputStream.CopyTo(cryptoStream); cryptoStream.FlushFinalBlock(); } public static void DecryptFile(string inputFilePath, string outputFilePath) { using var des = new DESCryptoServiceProvider(); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); des.Key = Key; des.IV = IV; using var decryptor = des.CreateDecryptor(); using var cryptoStream = new CryptoStream(inputStream, decryptor, CryptoStreamMode.Read); cryptoStream.CopyTo(outputStream); outputStream.Flush(); } } ``` RSA算法加密解密示例代码: ```csharp using System; using System.IO; using System.Security.Cryptography; public class RSAExample { private static readonly string PublicKey = "<RSAKeyValue><Modulus>oKI2Hxg7K5Hd6d8DT7+7p6vqoLJpFwNpkBzv/k4rZKw86hs2Gx9zTt2+JzLJ3VYsZq8YfK0V0d85t2c+Jq3D7BjnsiP9i4j6kOaRc7v7GKv4rRAc7S6t7WhrFVg+KQ9dZ5iM6NhrX7oOqB5hLb7p9eN+5VB9X4IWFSz+Q3YE=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>"; private static readonly string PrivateKey = "<RSAKeyValue><Modulus>oKI2Hxg7K5Hd6d8DT7+7p6vqoLJpFwNpkBzv/k4rZKw86hs2Gx9zTt2+JzLJ3VYsZq8YfK0V0d85t2c+Jq3D7BjnsiP9i4j6kOaRc7v7GKv4rRAc7S6t7WhrFVg+KQ9dZ5iM6NhrX7oOqB5hLb7p9eN+5VB9X4IWFSz+Q3YE=</Modulus><Exponent>AQAB</Exponent><P>6DdR7M/CuFjyF3v6MfTnW8MhFwM8Wt4GpBZG9e+y5L8=</P><Q>6J3f2gPQy7E1k1PbR+0WwC5yZPQ/N4WZ4GQvyXq1r5I=</Q><DP>bqbN+qWZJ+Oul9F73BvKm4JNm91qMpbkzqx4WovhD9k=</DP><DQ>Y7e4CKD+5pwu7e4oCzIYs0E3LlUWJf4LkLwN+3Q6w6U=</DQ><InverseQ>g4TlKvQf7r6jVQK2lRrV4Zar0hN6I4oWU1Lm9p1zvAo=</InverseQ><D>aeHvIhO4+Yk7bW+4qo7w5yJjWjyWz3mVW5l1mLb0h8JtPZV12qY8jMHZ0cNzUJ7a1Z1IjWkN73uU+qT0O4O5ZQK0ZyO0zj8FIAJn5wJj7rP8Lw5Ll5Qk7K1jy6h0J0O3mY9Hf6Lg2X4L2u6G4LrD5kiJ8Y2nWZL3V7E0e6YB0=</D></RSAKeyValue>"; public static void EncryptFile(string inputFilePath, string outputFilePath) { using var rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(PublicKey); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); using var encryptor = rsa.CreateEncryptor(); using var cryptoStream = new CryptoStream(outputStream, encryptor, CryptoStreamMode.Write); inputStream.CopyTo(cryptoStream); cryptoStream.FlushFinalBlock(); } public static void DecryptFile(string inputFilePath, string outputFilePath) { using var rsa = new RSACryptoServiceProvider(); rsa.FromXmlString(PrivateKey); using var inputStream = new FileStream(inputFilePath, FileMode.Open, FileAccess.Read); using var outputStream = new FileStream(outputFilePath, FileMode.Create, FileAccess.Write); using var decryptor = rsa.CreateDecryptor(); using var cryptoStream = new CryptoStream(inputStream, decryptor, CryptoStreamMode.Read); cryptoStream.CopyTo(outputStream); outputStream.Flush(); } } ``` 以上代码仅供参考,具体实现需要根据您的需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值