C#几种常用的加密方式

https://blog.youkuaiyun.com/qq_32688731/article/details/80657826

tips:c# 使用aes加密的话,密钥格式utf-8的是纯字母,不要用带数字。
前端后端调通即可

DES3加密代码:

using System;
using System.Security.Cryptography;
using System.Text;

public static class DES3Helper
{
    private static readonly byte[] Key = Encoding.UTF8.GetBytes("my3deskey123456789012345"); // 密钥,必须为 24 字节
    private static readonly byte[] IV = Encoding.UTF8.GetBytes("my3desiv"); // 向量,必须为 8 字节

    // 加密字符串
    public static string Encrypt(string text)
    {
        byte[] inputBytes = Encoding.UTF8.GetBytes(text);
        using (var des3 = new TripleDESCryptoServiceProvider())
        {
            des3.Key = Key;
            des3.IV = IV;
            des3.Mode = CipherMode.CBC;
            des3.Padding = PaddingMode.PKCS7;

            using (var ms = new System.IO.MemoryStream())
            using (var cs = new CryptoStream(ms, des3.CreateEncryptor(), CryptoStreamMode.Write))
            {
                cs.Write(inputBytes, 0, inputBytes.Length);
                cs.FlushFinalBlock();
                return Convert.ToBase64String(ms.ToArray());
            }
        }
    }

    // 解密字符串
    public static string Decrypt(string text)
    {
        byte[] inputBytes = Convert.FromBase64String(text);
        using (var des3 = new TripleDESCryptoServiceProvider())
        {
            des3.Key = Key;
            des3.IV = IV;
            des3.Mode = CipherMode.CBC;
            des3.Padding = PaddingMode.PKCS7;

            using (var ms = new System.IO.MemoryStream())
            using (var cs = new CryptoStream(ms, des3.CreateDecryptor(), CryptoStreamMode.Write))
            {
                cs.Write(inputBytes, 0, inputBytes.Length);
                cs.FlushFinalBlock();
                return Encoding.UTF8.GetString(ms.ToArray());
            }
        }
    }
}

RSA加密: tips:一定要先生成一套公私钥
1,生成成对秘钥:

using System.Security.Cryptography;
using System.Text;

public static class RSAKeyGenerator
{
    // 生成新的公钥和私钥
    public static void GenerateKeys(out string publicKey, out string privateKey)
    {
        using (var rsa = new RSACryptoServiceProvider(2048))//默认长度2048
        {
            publicKey = rsa.ToXmlString(false);
            privateKey = rsa.ToXmlString(true);
        }
    }
}

2.加解密代码示例

using System;
using System.Security.Cryptography;
using System.Text;

public static class RSAHelper
{
    private static readonly string publicKey = "<RSAKeyValue><Modulus>obYsXqRZK3uTK+4cWsd+3x3N6MkD+JZDm/7b1ts7F6zPdN8v0Mjv2Vf9kP6VdQh+0aMmOeYxgWizTl2xZ5LrI0VqJjJxqB6LqL1lmRbhW4tYk6YcSxZzG7UZ++JkC9yU0qXO6Y1a4RQ6K8lL0a4z1iHsn1QX8orJ5qK3wK8=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
    private static readonly string privateKey = "<RSAKeyValue><Modulus>obYsXqRZK3uTK+4cWsd+3x3N6MkD+JZDm/7b1ts7F6zPdN8v0Mjv2Vf9kP6VdQh+0aMmOeYxgWizTl2xZ5LrI0VqJjJxqB6LqL1lmRbhW4tYk6YcSxZzG7UZ++JkC9yU0qXO6Y1a4RQ6K8lL0a4z1iHsn1QX8orJ5qK3wK8=</Modulus><Exponent>AQAB</Exponent><P>2J8U2bJ9xJvzNnYj8HxJUeQ5qHQJwS4TjJwKx6y2BzE=</P><Q>1qPj8U3jxu0Qzjz6JZ3T1c/WTzGQwXo8BjvVZ7nK5+4=</Q><DP>EC2LqkXQVvUf2VJ4bTpvvL9EUtRQg7K9X9c8EEg6WwE=</DP><DQ>WJF3w5D/YR6rNUEv5Ve8sO1eI2HcZbVtC0K3M8T3Jp0=</DQ><InverseQ>x5JVzT6wOgzrW1vzK1mXUwT6JzN1BjH+yrjikp/OXBA=</InverseQ><D>Ns7l7wT5Q2bFzQrF+8mWMkfUH5ZPmG0K8Qcgz9qQ8YhjxTKJf0Qd+Yl8cZ3j5Wc0cFqZpPd9r7gU5M3XjXQ9r1z3qDv0Qd3WI1Nv2pZJ1R0k1jL2VJnrl0NkSiovLXOv5lZNCZ2RqVhXZqgNf0A/1xJ1YBfzL3e6p6cGp8fV5k=</D></RSAKeyValue>";
    private static readonly RSACryptoServiceProvider cryptoServiceProvider = new RSACryptoServiceProvider();

    // 加密字符串
    public static string Encrypt(string text)
    {
        cryptoServiceProvider.FromXmlString(publicKey);
        byte[] inputBytes = Encoding.UTF8.GetBytes(text);
        byte[] encryptedBytes = cryptoServiceProvider.Encrypt(inputBytes, false);
        return Convert.ToBase64String(encryptedBytes);
    }

    // 解密字符串
    public static string Decrypt(string text)
    {
        cryptoServiceProvider.FromXmlString(privateKey);
        byte[] inputBytes = Convert.FromBase64String(text);
        byte[] decryptedBytes = cryptoServiceProvider.Decrypt(inputBytes, false);
        return Encoding.UTF8.GetString(decryptedBytes);
    }
}

3,SHA加密

using System;
using System.Collections.Generic;
using System.Linq;
using System.Security.Cryptography;
using System.Text;

    public class SHAHelper
    {
        public static string SHAmd5Encrypt(string normalTxt)
        {
            var bytes = Encoding.Default.GetBytes(normalTxt);//求Byte[]数组  
            var Md5 = new MD5CryptoServiceProvider();
            var encryptbytes = Md5.ComputeHash(bytes);//求哈希值  
            return Base64To16(encryptbytes);//将Byte[]数组转为净荷明文(其实就是字符串)  
        }

        public static string SHA1Encrypt(string normalTxt)
        {
            var bytes = Encoding.Default.GetBytes(normalTxt);
            var SHA = new SHA1CryptoServiceProvider();
            var encryptbytes = SHA.ComputeHash(bytes);
            return Base64To16(encryptbytes);
        }
        public static string SHA256Encrypt(string normalTxt)
        {
            var bytes = Encoding.Default.GetBytes(normalTxt);
            var SHA256 = new SHA256CryptoServiceProvider();
            var encryptbytes = SHA256.ComputeHash(bytes);
            return Base64To16(encryptbytes);
        }
        public static string SHA384Encrypt(string normalTxt)
        {
            var bytes = Encoding.Default.GetBytes(normalTxt);
            var SHA384 = new SHA384CryptoServiceProvider();
            var encryptbytes = SHA384.ComputeHash(bytes);
            return Base64To16(encryptbytes);
        }
        public static string SHA512Encrypt(string normalTxt)
        {
            var bytes = Encoding.Default.GetBytes(normalTxt);
            var SHA512 = new SHA512CryptoServiceProvider();
            var encryptbytes = SHA512.ComputeHash(bytes);
            return Base64To16(encryptbytes);
        }


        private static string Base64To16(byte[] buffer)
        {
            string md_str = string.Empty;
            for (int i = 0; i < buffer.Length; i++)
            {
                md_str += buffer[i].ToString("x2");
            }
            return md_str;
        }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值