zoukankan      html  css  js  c++  java
  • C# 基于密钥的64位加密与解密方法(原创)

    本程序适用于产品的价格加密生成图片格式的价格,防止价格被抓去

    using System;

    /// <summary>
    ///TTBase64Encode 的摘要说明
    /// </summary>
    public class TTBase64Encode
    {
    public TTBase64Encode()
    {
    //
    //TODO: 在此处添加构造函数逻辑
    //
    }

    const string imgurlhost = "http://img.cblogs.com";
    const string ttBASE_64_MAP_INIT = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
    //ReadKeyFromFile(g_KeyLocation)
    const string g_Key = "WERTYUIOFVGBNM663285716";

    string ttnewline;

    string[] ttBase64EncMap = new string[63];
    string[] Base64DecMap = new string[127];

    //初始化函数
    public void ttinitCodecs()
    {
    // 初始化变量
    ttnewline = "<P>" + Convert.ToChar(13) + Convert.ToChar(10);
    dynamic ttmax
    = null;
    dynamic ttidx
    = null;
    ttmax
    = ttBASE_64_MAP_INIT.Length;

    for (ttidx = 0; ttidx <= ttmax - 1; ttidx++)
    {
    ttBase64EncMap[ttidx]
    = ttBASE_64_MAP_INIT.Substring(ttidx + 1, 1);
    }
    for (ttidx = 0; ttidx <= ttmax - 1; ttidx++)
    {

    Base64DecMap[Asc(ttBase64EncMap[ttidx])]
    = ttidx;
    }
    }

    /// <summary>
    /// 转化为ascii
    /// </summary>
    /// <param name="s"></param>
    /// <returns></returns>
    protected int stringtoascii(string s)
    {
    string ascii = "";
    foreach (char c in s)
    {
    int str = (int)c;
    ascii
    += str + ",";
    }
    if (ascii.Length > 0)
    {
    ascii
    = ascii.Substring(0, ascii.Length - 1);
    }
    return Convert.ToInt32(ascii);
    }
    /// <summary>
    /// 转化为Ascii
    /// </summary>
    /// <param name="character"></param>
    /// <returns></returns>
    public static int Asc(string character)
    {
    if (character.Length == 1)
    {
    System.Text.ASCIIEncoding asciiEncoding
    = new System.Text.ASCIIEncoding();
    int intAsciiCode = (int)asciiEncoding.GetBytes(character)[0];
    return (intAsciiCode);
    }
    else
    {
    throw new Exception("Character is not valid.");
    }
    }

    ///Base64加密函数
    public object ttbase64Encode(string price)
    {
    string ttret = string.Empty;
    if (price.Length == 0)
    {
    return "";
    }

    string ttplain = EnCrypt(price).ToString();


    dynamic ttndx
    = null;
    dynamic ttby3
    = null;
    dynamic ttfirst
    = null;
    dynamic ttsecond
    = null;
    dynamic ttthird
    = null;
    ttby3
    = (ttplain.Length / 3) * 3;
    ttndx
    = 1;
    while (ttndx <= ttby3)
    {

    ttfirst
    = Asc(ttplain.Substring(ttndx + 0, 1));
    ttsecond
    = Asc(ttplain.Substring(ttndx + 1, 1));
    ttthird
    = Asc(ttplain.Substring(ttndx + 2, 1));
    ttret
    = ttret + ttBase64EncMap[(ttfirst / 4) & 63];
    ttret
    = ttret + ttBase64EncMap[((ttfirst * 16) & 48) + ((ttsecond / 16) & 15)];
    ttret
    = ttret + ttBase64EncMap[((ttsecond * 4) & 60) + ((ttthird / 64) & 3)];
    ttret
    = ttret + ttBase64EncMap[ttthird & 63];
    ttndx
    = ttndx + 3;
    }

    if (ttby3 < ttplain.Length)
    {

    ttfirst
    = Asc(ttplain.Substring(ttndx + 0, 1));
    ttret
    = ttret + ttBase64EncMap[(ttfirst / 4) & 63];
    if ((ttplain.Length % 3) == 2)
    {

    ttsecond
    = Asc(ttplain.Substring(ttndx + 1, 1));
    ttret
    = ttret + ttBase64EncMap[((ttfirst * 16) & 48) + ((ttsecond / 16) & 15)];
    ttret
    = ttret + ttBase64EncMap[((ttsecond * 4) & 60)];
    }
    else
    {
    ttret
    = ttret + ttBase64EncMap[(ttfirst * 16) & 48];
    }
    }

    return ttret;
    }
    ////Base64解密函数
    public object ttbase64Decode(string ttscrambled)
    {
    string ttret = string.Empty;
    if (ttscrambled.Length == 0)
    {
    return ttret;
    }
    dynamic ttrealLen
    = null;
    ttrealLen
    = ttscrambled.Length;
    while (ttscrambled.Substring(ttrealLen, 1) == "=")
    {
    ttrealLen
    = ttrealLen - 1;
    }

    dynamic ttndx
    = null;
    dynamic ttby4
    = null;
    dynamic ttfirst
    = null;
    dynamic ttsecond
    = null;
    dynamic ttthird
    = null;
    dynamic ttfourth
    = null;
    ttret
    = "";
    ttby4
    = (ttrealLen / 4) * 4;
    ttndx
    = 1;

    while (ttndx <= ttby4)
    {
    ttfirst
    = Base64DecMap[Asc(ttscrambled.Substring(ttndx + 0, 1))];
    ttsecond
    = Base64DecMap[Asc(ttscrambled.Substring(ttndx + 1, 1))];
    ttthird
    = Base64DecMap[Asc(ttscrambled.Substring(ttndx + 2, 1))];
    ttfourth
    = Base64DecMap[Asc(ttscrambled.Substring(ttndx + 3, 1))];

    ttret
    = ttret + Convert.ToChar(((ttfirst * 4) & 255) + ((ttsecond / 16) & 3));
    ttret
    = ttret + Convert.ToChar(((ttsecond * 16) & 255) + ((ttthird / 4) & 15));
    ttret
    = ttret + Convert.ToChar(((ttthird * 64) & 255) + (ttfourth & 63));
    ttndx
    = ttndx + 4;
    }
    if (ttndx < ttrealLen)
    {
    ttfirst
    = Base64DecMap[Asc(ttscrambled.Substring(ttndx + 0, 1))];
    ttsecond
    = Base64DecMap[Asc(ttscrambled.Substring(ttndx + 1, 1))];
    ttret
    = ttret + Convert.ToChar(((ttfirst * 4) & 255) + ((ttsecond / 16) & 3));
    if (ttrealLen % 4 == 3)
    {
    ttthird
    = Base64DecMap[Asc(ttscrambled.Substring(ttndx + 2, 1))];
    ttret
    = ttret + Convert.ToChar(((ttsecond * 16) & 255) + ((ttthird / 4) & 15));
    }
    }

    return ttret;
    }

    /// <summary>
    /// 加密调用方法入口
    /// </summary>
    /// <param name="strCryptThis"></param>
    /// <returns></returns>
    public object EnCrypt(string strCryptThis)
    {
    dynamic strChar
    = null;
    dynamic iKeyChar
    = null;
    dynamic iStringChar
    = null;
    dynamic strEncrypted
    = null;
    dynamic I
    = null;
    dynamic leng
    = null;
    leng
    = strCryptThis.Length;

    for (I = 0; I < leng; I++)
    {
    iKeyChar
    = Asc(g_Key.Substring(I, 1));
    iStringChar
    = Asc(strCryptThis.Substring(I, 1));
    dynamic iCryptChar
    = iKeyChar ^ iStringChar;
    strEncrypted
    += Convert.ToChar(iCryptChar).ToString();
    }
    return strEncrypted;

    }

    }
  • 相关阅读:
    聊聊算法——回溯算法
    Redis高级用法
    聊聊算法——BFS和DFS
    这就是Java代码生成器的制作流程
    Spring Boot 2 实战:常用读取配置的方式
    Spring Security 实战干货:图解Spring Security中的Servlet过滤器体系
    想做时间管理大师?你可以试试Mybatis Plus代码生成器
    Maven中央仓库正式成为Oracle官方JDBC驱动程序组件分发中心
    作为一个Java开发你用过Jib吗
    使用反应式关系数据库连接规范R2DBC操作MySQL数据库
  • 原文地址:https://www.cnblogs.com/jqbird/p/1986096.html
Copyright © 2011-2022 走看看