一 字符串base64格式和还原
1.1 base64格式
public static string GetStringToBase64(string input)
{
// 将输入字符串转换为字节数组
byte[] inputBytes = Encoding.UTF8.GetBytes(input);
// 计算输入字节数组的哈希值
// byte[] hashBytes = algorithm.ComputeHash(inputBytes);
// 将哈希值字节数组转换为字符串
//StringBuilder sb = new StringBuilder();
//for (int i = 0; i < hashBytes.Length; i++)
//{
// sb.Append(hashBytes[i].ToString("X2")); // 格式化为十六进制字符串
//}
string base64Hash = Convert.ToBase64String(inputBytes);
return base64Hash;
}
1.2还原
using System;
class Program
{
static void Main()
{
// 假设我们有一个Base64编码的字符串
string base64String = "SGVsbG8gV29ybGQh"; // Base64编码的 "Hello World!"
// 将Base64字符串解码为字节
byte[] bytes = Convert.FromBase64String(base64String);
// 将字节转换回文本字符串
string originalString = Encoding.UTF8.GetString(bytes);
Console.WriteLine("Decoded String: " + originalString);
}
}
二 RSA-SHA256 签名和验证
// 使用RSA-SHA256算法对数据进行签名
public static string SignDataWithRSA(string data, string privateKey)
{
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
// 创建RSA加密服务提供程序并加载私钥
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(privateKey);
// 使用RSACryptoServiceProvider进行签名
byte[] signatureBytes = rsa.SignData(dataBytes, new SHA256CryptoServiceProvider());
// 将签名转换为Base64字符串
string signature = Convert.ToBase64String(signatureBytes);
return signature;
}
}
/// <summary>
/// 验证签名方法
/// </summary>
/// <param name="data"></param>
/// <param name="signature"></param>
/// <param name="publicKeyKey"></param>
/// <returns></returns>
public static bool VerifySignature(string data, string signature, string publicKeyKey)
{
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
// 将Base64字符串解码为字节
byte[] bytes = Convert.FromBase64String(signature);
// 将字节转换回文本字符串
// string originalString = Encoding.UTF8.GetString(bytes);
// 创建RSA加密服务提供程序并加载私钥
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.FromXmlString(publicKeyKey);
return rsa.VerifyData(dataBytes, new SHA256CryptoServiceProvider(), bytes);
}
}
// 使用SHA-256算法对数据进行哈希运算
public static byte[] ComputeSHA256Hash(string data)
{
using (SHA256 sha256 = SHA256.Create())
{
byte[] dataBytes = Encoding.UTF8.GetBytes(data);
return sha256.ComputeHash(dataBytes);
}
}