折腾了一晚上 C#加密还是用这个比较方便

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

//1、将字符串转换成字节数组
//2、选择加密方式


//3、不可逆加密:MD5、SHA1
//4、可逆加密:DES、RC2、Rijndael
//5、对密钥要求长度不同
//6、加密速度不同、复杂程度不同、安全性不同

 


public class Class10
{
    public Class10()
    {
        CallMyDES();
    }

    void CallMyDES()
    {
        Byte[] key = { 12, 23, 34, 45, 56, 67, 78, 89 };
        Byte[] iv = { 120, 230, 10, 1, 10, 20, 30, 40 };

        //1、调用MD5、SHA1加密
        bool result = MyMD5Crypto("123456");

        //2、调用DES加密、解密
        string a = MyDESCrypto("123456", key, iv);
        string b = MyDESCryptoDe(a, key, iv);

        //3、调用DES对文件加密、解密
        MyDESCryptoFile("123456", key, iv);
        string str = MyDESCryptoFileDe(key, iv);

        //4、调用TripleDES加密、解密
        string a1 = TripleDESCrypto("中国", "8i9o0p-[=]'/;.l,");//天津香港澳门台湾
        string b1 = TripleDESCryptoDe(a1, "8i9o0p-[=]'/;.l,");

        //5、调用自定义加密、解密
        MyCrypto();


        rsa 比 dea慢,但比dsa安全

        //DSA dsa = DSA.Create();
        //RSA rea = RSA.Create();

        64
        //DES des = DES.Create();

        //TripleDES tDes = TripleDES.Create();

        //RC2 rc2 = RC2.Create();
        或
        //RC2 rc21 = (RC2)SymmetricAlgorithm.Create("RC2");

        //Rijndael rjd = Rijndael.Create();

        //MD5 md5 = MD5.Create();

        //SHA1 sha1 = SHA1.Create();
    }


    //1、MD5、SHA1加密(可用于加密后的数据以后不再显示,如加密用户密码)
    bool MyMD5Crypto(string userPassword)//"123456";
    {
        bool result = false;
        //单向加密
        //1、MD5        
        string dbPassword = "E10ADC3949BA59ABBE56E057F20F883E";
        string md5Password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(userPassword, "MD5");
        if (md5Password == dbPassword)
        {
            result = true;
        }

        //2、SHA1
        string sha1Password = System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(userPassword, "SHA1");
        //"7C4A8D09CA3762AF61E59520943DC26494F8941B"

        return result;
    }

    //2、DES对字符串加密、解密
    string MyDESCrypto(string str, byte[] keys, byte[] ivs)
    {
        //加密
        byte[] strs = Encoding.Unicode.GetBytes(str);


        DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
        MemoryStream mStream = new MemoryStream();

        ICryptoTransform transform = desc.CreateEncryptor(keys, ivs);//加密对象
        CryptoStream cStream = new CryptoStream(mStream, transform, CryptoStreamMode.Write);
        cStream.Write(strs, 0, strs.Length);
        cStream.FlushFinalBlock();
        return Convert.ToBase64String(mStream.ToArray());
    }
    string MyDESCryptoDe(string str, byte[] keys, byte[] ivs)
    {
        //解密
        byte[] strs = Convert.FromBase64String(str);

        DESCryptoServiceProvider desc = new DESCryptoServiceProvider();
        MemoryStream mStream = new MemoryStream();

        ICryptoTransform transform = desc.CreateDecryptor(keys, ivs);//解密对象

        CryptoStream cStream = new CryptoStream(mStream, transform, CryptoStreamMode.Write);
        cStream.Write(strs, 0, strs.Length);
        cStream.FlushFinalBlock();
        return Encoding.Unicode.GetString(mStream.ToArray());
    }

    //3、DSA对文件加密、解密
    void MyDESCryptoFile(string str, Byte[] key, Byte[] iv)
    {
        Byte[] inputStr = Encoding.Unicode.GetBytes(str);
        //
        DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
        ICryptoTransform transform = provider.CreateEncryptor(key, iv);//加密对象

        FileStream fStream = new FileStream(@"D:/a.txt", FileMode.Create, FileAccess.Write);
        CryptoStream cStream = new CryptoStream(fStream, transform, CryptoStreamMode.Write);
        cStream.Write(inputStr, 0, inputStr.Length);
        cStream.Close();
    }
    string MyDESCryptoFileDe(Byte[] key, Byte[] iv)
    {
        DESCryptoServiceProvider provider = new DESCryptoServiceProvider();
        ICryptoTransform transform = provider.CreateDecryptor(key, iv);//解密对象

        FileStream fStream = new FileStream(@"D:/a.txt", FileMode.Open, FileAccess.Read);
        CryptoStream cStream = new CryptoStream(fStream, transform, CryptoStreamMode.Read);

        StreamReader reader = new StreamReader(cStream, new UnicodeEncoding());
        string str = reader.ReadToEnd();
        cStream.Close();
        return str;
    }

    //4、TripleDES加密、解密
    string TripleDESCrypto(string str, string key)
    {
        byte[] data = UnicodeEncoding.Unicode.GetBytes(str);//如果加密中文,不能用ASCII码
        byte[] keys = ASCIIEncoding.ASCII.GetBytes(key);

        TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
        des.Key = keys;//key的长度必须为16位或24位,否则报错“指定键的大小对于此算法无效。”,des.Key不支持中文
        des.Mode = CipherMode.ECB;//设置运算模式
        ICryptoTransform cryp = des.CreateEncryptor();//加密

        return Convert.ToBase64String(cryp.TransformFinalBlock(data, 0, data.Length));
    }
    string TripleDESCryptoDe(string str, string key)
    {
        byte[] data = Convert.FromBase64String(str);
        byte[] keys = ASCIIEncoding.ASCII.GetBytes(key);

        TripleDESCryptoServiceProvider des = new TripleDESCryptoServiceProvider();
        des.Key = keys;
        des.Mode = CipherMode.ECB;//设置运算模式
        des.Padding = PaddingMode.PKCS7;
        ICryptoTransform cryp = des.CreateDecryptor();//解密

        return UnicodeEncoding.Unicode.GetString(cryp.TransformFinalBlock(data, 0, data.Length));
    }

    //5、自定义加密、解密
    void MyCrypto()
    {
        string a = "123456中国";
        string b = "";
        //加密
        for (int i = 0; i < a.Length; i++)
        {
            b += (char)(a[i] + 10 - 2 * 3);
        }

        //解密
        string c = "";
        for (int i = 0; i < a.Length; i++)
        {
            c += (char)(b[i] - 10 + 2 * 3);
        }

    }
}

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值