zoukankan      html  css  js  c++  java
  • 维吉尼亚加密与解密

     /// <summary>
        /// 维吉尼亚加密与解密
        /// </summary>
        public static class VigenereHelper
        {
            /// <summary>
            /// 密钥
            /// </summary>
            private static string TableKey = @"abcdefghijklmnopqrstuvwxyz_ABCDEFGHIJKLMNOPQRSTUVWXYZ-0123456789=&";
    
            /// <summary>
            /// 生成密钥字符串
            /// </summary> 
            /// <param name="input">明文或者密文</param>
            /// <returns></returns>
            private static string GetKey(string input)
            {
                string key = "ZoveCenter202104091148";
                StringBuilder sbKey = new StringBuilder(key);
                //如果密钥长度比str短,则以不断重复密钥的方式生成密钥字符串
                while (sbKey.Length < input.Length)
                {
                    sbKey.Append(key);
                }
                return sbKey.ToString();
            }
    
            /// <summary>  
            /// 加密算法  
            /// </summary>  
            /// <param name="input">明文字符串</param>   
            /// <returns>字符串</returns>  
            public static string Encrypt(string input)
            {
                //密钥字符串
                string K = GetKey(input);
                StringBuilder sbRel = new StringBuilder();
                for (var loop = 0; loop < input.Length; loop++)
                {
                    //明文字符位置
                    var iP = TableKey.IndexOf(input[loop]);
                    if (iP == -1)
                    {
                        sbRel.Append(input[loop]);
                    }
                    else
                    {
                        //密钥字符位置
                        var iK = TableKey.IndexOf(K[loop]);
                        if (iK == -1)
                        {
                            throw new Exception("密钥中包含非法字符:" + TableKey[loop]);
                        }
                        sbRel.Append(TableKey[(iP + iK) % TableKey.Length]);
                    }
                }
                return sbRel.ToString();
            }
    
            /// <summary>  
            /// 解密  
            /// </summary>  
            /// <param name="input">密文</param>   
            /// <returns>返回解密后的字符串</returns>  
            public static string Decrypt(string input)
            {
                //密钥字符串
                string K = GetKey(input);
                StringBuilder sbRel = new StringBuilder();
                for (var loop = 0; loop < input.Length; loop++)
                {
                    //密钥判断
                    var iK = TableKey.IndexOf(K[loop]);
                    //密文字符
                    var iC = TableKey.IndexOf(input[loop]);
                    if (iC == -1)
                    {
                        sbRel.Append(input[loop]);
                    }
                    else if (iK > iC)
                    {
                        sbRel.Append(TableKey[iC + TableKey.Length - iK]);
                    }
                    else
                    {
                        sbRel.Append(TableKey[iC - iK]);
                    }
                }
                return sbRel.ToString();
            }
        }
  • 相关阅读:
    Django框架学习-Model进阶用法
    jquery获取元素的所有宽高(包括内边距和外边距)
    django group_by
    jquery如何判断滚动条滚到页面底部并执行事件
    web ajax跨域问题解决方案
    django ckeditor的使用方法
    django自带User管理中添加自己的字段方法
    如何在django中使用多个数据库
    使用django-mssql时候报pythoncom模块不存在
    centos命令行常用操作
  • 原文地址:https://www.cnblogs.com/5tomorrow/p/13346387.html
Copyright © 2011-2022 走看看