zoukankan      html  css  js  c++  java
  • C#BASE64 UTF8字符串加密解密

    base 64 解码

    base64 bb = new base64();
    string  orgStr= Encoding.Default.GetString(bb.GetDecoded("base64编译后的字符"));

    UTF8

    Subject = Encoding.GetEncoding("utf-8").GetString(Convert.FromBase64String("utf编译后的字符")); 

    base64加密

    public class base64
        {
            char[] source;
            int length, length2, length3;
            int blockCount;
            int paddingCount;
            public static base64 Decoder = new base64();
            public base64()
            { }
            private void init(char[] input)
            {
                int temp = 0;
                source = input;
                length = input.Length;
    
                for (int x = 0; x < 2; x++)
                {
                    if (input[length - x - 1] == '=')
                        temp++;
                }
                paddingCount = temp;
    
                blockCount = length / 4;
                length2 = blockCount * 3;
            }
            /// <summary>
            /// 加密后的字符串解密
            /// </summary>
            /// <param name="strInput"></param>
            /// <returns></returns>
            public byte[] GetDecoded(string strInput)
            {
                //初始化
                init(strInput.ToCharArray());
    
                byte[] buffer = new byte[length];
                byte[] buffer2 = new byte[length2];
    
                for (int x = 0; x < length; x++)
                {
                    buffer[x] = char2sixbit(source[x]);
                }
    
                byte b, b1, b2, b3;
                byte temp1, temp2, temp3, temp4;
    
                for (int x = 0; x < blockCount; x++)
                {
                    temp1 = buffer[x * 4];
                    temp2 = buffer[x * 4 + 1];
                    temp3 = buffer[x * 4 + 2];
                    temp4 = buffer[x * 4 + 3];
    
                    b = (byte)(temp1 << 2);
                    b1 = (byte)((temp2 & 48) >> 4);
                    b1 += b;
    
                    b = (byte)((temp2 & 15) << 4);
                    b2 = (byte)((temp3 & 60) >> 2);
                    b2 += b;
    
                    b = (byte)((temp3 & 3) << 6);
                    b3 = temp4;
                    b3 += b;
    
                    buffer2[x * 3] = b1;
                    buffer2[x * 3 + 1] = b2;
                    buffer2[x * 3 + 2] = b3;
                }
    
                length3 = length2 - paddingCount;
                byte[] result = new byte[length3];
    
                for (int x = 0; x < length3; x++)
                {
                    result[x] = buffer2[x];
                }
    
                return result;
            }
    
            private byte char2sixbit(char c)
            {
                char[] lookupTable = new char[64]{  
                     'A','B','C','D','E','F','G','H','I','J','K','L','M','N',
                     'O','P','Q','R','S','T','U','V','W','X','Y', 'Z',
                     'a','b','c','d','e','f','g','h','i','j','k','l','m','n',
                     'o','p','q','r','s','t','u','v','w','x','y','z',
                     '0','1','2','3','4','5','6','7','8','9','+','/'};
                if (c == '=')
                    return 0;
                else
                {
                    for (int x = 0; x < 64; x++)
                    {
                        if (lookupTable[x] == c)
                            return (byte)x;
                    }
    
                    return 0;
                }
    
            }
    
            /// <summary>
            /// Base64解密,采用utf8编码方式解密
            /// </summary>
            /// <param name="result">待解密的密文</param>
            /// <returns>解密后的字符串</returns>
            public static string DecodeBase64(string result)
            {
                return DecodeBase64(Encoding.UTF8, result);
            }
            /// <summary>
            /// Base64解密
            /// </summary>
            /// <param name="codeName">解密采用的编码方式,注意和加密时采用的方式一致</param>
            /// <param name="result">待解密的密文</param>
            /// <returns>解密后的字符串</returns>
            public static string DecodeBase64(Encoding encode, string result)
            {
                string decode = "";
                byte[] bytes = Convert.FromBase64String(result);
                try
                {
                    decode = encode.GetString(bytes);
                }
                catch
                {
                    decode = result;
                }
                return decode;
            }
            /// <summary>
            /// Base64加密
            /// </summary>
            /// <param name="codeName">加密采用的编码方式</param>
            /// <param name="source">待加密的明文</param>
            /// <returns></returns>
            public static string EncodeBase64(Encoding encode, string source)
            {
                string decode = "";
                byte[] bytes = encode.GetBytes(source);
                try
                {
                    decode = Convert.ToBase64String(bytes);
                }
                catch
                {
                    decode = source;
                }
                return decode;
            }
    
            /// <summary>
            /// Base64加密,采用utf8编码方式加密
            /// </summary>
            /// <param name="source">待加密的明文</param>
            /// <returns>加密后的字符串</returns>
            public static string EncodeBase64(string source)
            {
                return EncodeBase64(Encoding.UTF8, source);
            }
        }
    
    转载请保留原地址. http://www.cnblogs.com/lsqandzy
  • 相关阅读:
    Thinkphp中如何书写按照指定字段同步更新的ORM
    一道money计算题引发的思考
    娱乐一下:汤姆君的大转盘算法(搞笑版)
    php导出数组到csv格式demo
    通过xshell/securecrt连接linux上传/下载文件
    windows设置代理.bat 脚本
    【面试题】输入并保存文件,完成后退出显示文件内容
    【设计模式学习笔记】 之 状态模式
    【学习笔记】FreeMarker 之于Servlet与Stuts2的应用
    【学习笔记】初识FreeMarker简单使用
  • 原文地址:https://www.cnblogs.com/lsqandzy/p/4248655.html
Copyright © 2011-2022 走看看