当前位置: 移动技术网 > IT编程>开发语言>c# > c#多种加解密示例(md5加密解密)

c#多种加解密示例(md5加密解密)

2019年07月18日  | 移动技术网IT编程  | 我要评论

复制代码 代码如下:

using system;
using system.collections.generic;
using system.globalization;
using system.io;
using system.security.cryptography;
using system.text;

/// <summary>
/// 加解密
/// </summary>
public static class crypthelper
{
    #region rsa加密

    /// <summary>
    /// 用指定公钥加密文本
    /// </summary>
    /// <param name="publickey">公钥</param>
    /// <param name="input">文本</param>
    /// <returns></returns>
    public static string rsaencrypt(string publickey, string input)
    {
        const string sformat =
            "<rsakeyvalue><modulus>{0}</modulus><exponent>aqab</exponent></rsakeyvalue>";
        var provider = new rsacryptoserviceprovider();
        var arrpubkey = hex2bytes(publickey);
        var pkb64 = convert.tobase64string(arrpubkey);
        var xmlstr = string.format(sformat, pkb64);
        var bytesinput = encoding.utf8.getbytes(input);
        provider.fromxmlstring(xmlstr);
        var encryptarray = provider.encrypt(bytesinput, false);
        var hexstr = bitconverter.tostring(encryptarray).replace("-", "");
        return hexstr.tolower();
    }

    #endregion

    #region 公用函数

    /// <summary>
    /// 将字节转换成16进制数字
    /// </summary>
    /// <param name="bytes">字节数组</param>
    /// <returns></returns>
    public static string bytes2hex(byte[] bytes)
    {
        var buffer = new stringbuilder();
        foreach (var t in bytes)
        {
            buffer.appendformat("{0:x2}", t);
        }
        return buffer.tostring();
    }

    /// <summary>
    /// 将16进制数组转换成字节
    /// </summary>
    /// <param name="input">16进制数组</param>
    /// <returns></returns>
    /// <exception cref="argumentoutofrangeexception"></exception>
    public static byte[] hex2bytes(string input)
    {
        if (string.isnullorempty(input)) return null;
        var offset = input.length%2;
        if (offset == 1) input = "0" + input;
        int i;
        var list = new list<byte>();
        for (i = 0; i < input.length; i += 2)
        {
            var temp = input.substring(i, 2);
            byte bv;
            var success = byte.tryparse(temp, numberstyles.hexnumber, null, out bv);
            if (!success) throw new argumentoutofrangeexception();
            list.add(bv);
        }
        return list.toarray();
    }

    #endregion

    #region sha1加密

    /// <summary>
    /// sha1加密 使用缺省密钥给字符串加密
    /// </summary>
    /// <param name="sourcestring"></param>
    /// <returns></returns>
    public static string sha1encrypt(string sourcestring)
    {
        var data = encoding.default.getbytes(sourcestring);
        hashalgorithm sha = new sha1cryptoserviceprovider();
        var bytes = sha.computehash(data);
        return bitconverter.tostring(bytes).replace("-", "");
    }

    #endregion

    #region des加解密

    /// <summary>
    /// des加密
    /// </summary>
    /// <param name="pubkey"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    public static string desencrypt(string pubkey, string input)
    {
        var des = new descryptoserviceprovider();
        var bytes = encoding.utf8.getbytes(input);
        des.key = encoding.ascii.getbytes(pubkey);
        des.iv = encoding.ascii.getbytes(pubkey);
        using (var ms = new memorystream())
        {
            using (var cryptostream = new cryptostream(ms, des.createencryptor(), cryptostreammode.write))
            {
                cryptostream.write(bytes, 0, bytes.length);
                cryptostream.flushfinalblock();
            }
            var data = ms.toarray();
            return bitconverter.tostring(data).replace("-", "");
        }
    }

    /// <summary>
    /// des解密
    /// </summary>
    /// <param name="pubkey"></param>
    /// <param name="input"></param>
    /// <returns></returns>
    public static string desdecrypt(string pubkey, string input)
    {
        var des = new descryptoserviceprovider();
        var bytes = hex2bytes(input);
        des.key = encoding.ascii.getbytes(pubkey);
        des.iv = encoding.ascii.getbytes(pubkey);
        using (var ms = new memorystream())
        {
            using (var cryptostream = new cryptostream(ms, des.createdecryptor(), cryptostreammode.write))
            {
                cryptostream.write(bytes, 0, bytes.length);
                cryptostream.flushfinalblock();
            }
            var data = ms.toarray();
            return encoding.utf8.getstring(data);
        }
    }

    #endregion

    #region md5加密

    /// <summary>
    /// md5加密
    /// </summary>
    /// <param name="input">输入</param>
    /// <returns></returns>
    public static string md5encrypt(string input)
    {
        md5 md5 = new md5cryptoserviceprovider();
        var data = encoding.utf8.getbytes(input);
        var encs = md5.computehash(data);
        return bitconverter.tostring(encs).replace("-", "");
    }

    #endregion
}

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网