`
lindexi-gd
  • 浏览: 139551 次
社区版块
存档分类
最新评论

C# 加密

 
阅读更多

看到好多加密算法,觉得自己写一个比较好。
网上保密密码的软件很多,但是不相信,自己写的,强度差也是保密强。
我是用哈希加密。

核心:移位,字符加密,填补空白。首先建立一个空白的字符串,指定长度length,要加密的文本根据密码获得每个字符在空白字符串的位置,这就是移位。然后把加密文本的每个字符都加密,本软件采用字符.unicode+密码.unicode。把空白字符串,放好加密字符串还空白的地方填充随机字符。

想法:
首先用密码得到要加密内容的哈希路径,把要加密内容放到一个临时的数组,路径就是他的位置。
然后把放在位置的字符串进行一次加密。
把空闲的位置放上随机的垃圾。

这样得到了加密的字符串 。

需要内存比较小,可以把加密的内容分为几个部分,然后并行加密。最后需要存储的空间比较大。

加密:
数据结构
string key 储存用户的密码
string str 要加密的字符串
string temp 储存,私有,字符数组,有_temp_length大小,储存加密后字符串

哈希路径函数
作用:
把一个字符依靠key用户密码得到在temp的位置。
例:
输入一个字符c,因为密码key决定在temp位置
计算输入c在temp位置t_position

可以把得到路径的字符放进去temp这样移位得到加密字符串。

哈希冲突函数
作用:
如果计算字符所在temp位置已经有字符,那么进行处理冲突,计算另一个位置。
例:
temp[哈希路径函数()]有字符,使用哈希冲突函数找到
temp[哈希冲突函数()]没有字符

空白填补
作用:
把temp[i]还空白的,填补随机字符
例:
temp[1-10]={c, ,c,c,c,c, ,c,c,c}
空白填补
temp[1-10]={c,填补,c,c,c,c,填补,c,c,c}

字符串加密
作用:
把temp加密,得到最后加密字符串
例:
temp=“123”
加密temp=“tem”

实现:
key[i] i=i>=key.length?0:i++;
用Conver.ToInt32(key[i])获得str第i个字符存temp位置。因为这位置可能比temp大小大,我们l=Conver.ToInt32(key[i])%_temp_length
字符串的i字符并没有在i>=key.length i=0是i++到字符串.length,实际不是使用i变量,而是自己再一个变量。
如果字符串[i]放到的temp[l]有字符了,就往下,找到一个没有字符的位置。
放下str[i],因为看到str[i],我们temp[l]=str[i]+key[i];这里的l是算出密码告诉字符串[i]所在位置和这个位置没有字符,i,str和key不一定是相同,因为如果key.length < str.length,i会变。
看到一片好多空,我们把空放random,得到混乱的密码。
写文件,buf = Encoding.Unicode.GetBytes(temp);

解密:
从文件 _temp_length*2转unicode,
temp = Encoding.Unicode.GetString(buf);
用密码获得字符串的位置,然后把字符串-key[i],解密

密码:
我们要保存key密码,我们使用md5。
key_temp=md5(key);
把key_temp做资源放到前面说的加密,str=key_temp得到密码加密,存放。
一次md5比较容易,我们nmd5,把密码
for(i=0;i<Convert.ToInt32(key[0]);i++)md5

using System;
using System.Diagnostics;
using System.Text;

namespace encryption_note
{
    public class string_decryption
    {
        ///需要 using System.IO;    
        private string_decryption()
        {            
            file_address = @".\data.data";
            _temp_string_lenth = 1024;            
        }
        public string_decryption(string file_加密的文件 , int key_length_more512)
        {
            key_length_more512 = 1024;
            _temp_string_lenth = key_length_more512;

            file_address = file_加密的文件;            
        }
        public string_decryption(string key)
        {
            int 密钥_大于512;
            密钥_大于512 = 1024;
            _temp_string_lenth = 密钥_大于512;
            this.key = key;
        }

        public static string_decryption g_获得类()
        {
            return _string_decryption;
        }
        public static string_decryption g_获得类(string file_加密的文件)
        {
            _string_decryption = new string_decryption(file_加密的文件 , 1024);
            return _string_decryption;
        }

        ~string_decryption()
        {


        }

        public string key
        {
            get
            {
                if (_key.Length <= 0)
                {
                    return "林德熙";
                }
                return _key;
            }
            set
            {
                _key = value;
            }
        }
        /// <summary>
        /// 加密文件绝对位置
        /// </summary>
        public string file_address
        {
            set
            {
                _file_address = value;
            }
            get
            {
                return _file_address;
            }
        }
        private int ran
        {
            set
            {
                _random = new Random(value);
            }
            get
            {
                return _random.Next(2) == 0 ? _random.Next(19968 , 40864) : _random.Next(33 , 126);
            }
        }

        public string encryption(string str)
        {
            char[] temp_str = new char[_temp_string_lenth];
            int i , has , key_place;//has字符位置,key_place密码位置
            //str = encryptDes(str);
            str += "结束";
            str.PadRight(_temp_string_lenth);
            for (i = 0; i < _temp_string_lenth; i++)
            {
                temp_str[i] = Convert.ToChar(0);
            }
            key_place = 0;
            for (i = 0; i < str.Length; i++)
            {
                has = Convert.ToInt32(key[key_place]);
                has = has % _temp_string_lenth;
                while (temp_str[has] != Convert.ToChar(0))//如果位置有别的字符就下一个,到没有字符位置
                {
                    has++;
                    if (has >= _temp_string_lenth)
                    {
                        has = 0;
                    }
                    //has=has>=_temp_string_lenth?0:has++;
                }
                //temp_str[l] = (char)(str[i]);//+key[key_l]);
                temp_str[has] = (char)((str[i]) + key[key_place]);
                key_place++;
                if (key_place == key.Length)
                {
                    key_place = 0;
                }
                //key_place=key_place>=key.length?0:key_place++;
            }
            //把空填充
            for (i = 0; i < _temp_string_lenth; i++)
            {
                if (temp_str[i] == Convert.ToChar(0))
                {
                    temp_str[i] = Convert.ToChar(ran); //% 1000+1);
                }
            }
            string s = new string(temp_str);
            return s;
            //return null;
        }
        public string decryption(string str)
        {
            StringBuilder temp = new StringBuilder();
            char[] jie = str.ToCharArray();
            int has , key_place;//has字符位置,key_place密码位置
            bool accomplish;
            accomplish = false;//初始
            has = 0;
            key_place = 0;
            if (jie.Length < _temp_string_lenth - 1)
            {
                Debug.Write("错" + jie.Length.ToString());
                return null;
            }
            while (accomplish == false)//我while(true)
            {
                has = Convert.ToInt32(key[key_place]);
                has = has % _temp_string_lenth;//密码给字符所在位置
                while (jie[has] == Convert.ToChar(0))
                {
                    has++;
                    if (has >= _temp_string_lenth)
                    {
                        accomplish = true;
                        break;
                    }
                }
                if (accomplish)
                {
                    break;
                }               
                temp.Append((char)((jie[has]) - key[key_place]));
                jie[has] = Convert.ToChar(0);//把原来位置0
                key_place++;
                if (key_place == key.Length)
                {
                    key_place = 0;
                }
            }
            string temp_str = temp.ToString();
            int temp_l = temp_str.LastIndexOf("结束");
            if (temp_l > 0)
            {                
                return temp_str.Substring(0 , temp_l);
            }
            else
            {
                return null;
            }
        }
        /// <summary>
        /// 加密key[0].toint次md5
        /// </summary>
        /// <param name="key">密码</param>
        /// <returns>加密后密码</returns>
        public string n_md5(string key)
        {
            string temp;
            int i;
            int str_0_length;
            if (string.IsNullOrEmpty(key))
            {
                temp = "";
                return temp.PadRight(32 , '0');
            }
            str_0_length = Convert.ToInt32(key[0]);
            temp = get_MD5(key);
            for (i = 1; i < str_0_length; i++)
            {
                temp = get_MD5(temp);
            }
            return temp;
        }

        private int _temp_string_lenth;
        private static string_decryption _string_decryption = new string_decryption();
        private Random _random = new Random();
        //加密文件的路径
        private string _file_address;
        private string _key;       
        /// <summary>
        /// md5加密
        /// </summary>
        /// <param name="str">要加密字符串</param>
        /// <returns>加密后密码</returns>
        private string get_MD5(string str)
        {
            System.Security.Cryptography.MD5CryptoServiceProvider md5 = new System.Security.Cryptography.MD5CryptoServiceProvider();
            byte[] temp;
            StringBuilder strb = new StringBuilder();
            temp = md5.ComputeHash(Encoding.Unicode.GetBytes(str));
            md5.Clear();
            for (int i = 0; i < temp.Length; i++)
            {
                strb.Append(temp[i].ToString("X").PadLeft(2 , '0'));
            }
            return strb.ToString().ToLower();            
        }        
    }

}

多个密码:
List<string> decryption;
里面加密密码,写入。每个大小_temp_length;

源码http:// pan.baidu.com/s/1pJ3cRwB 密码: w9td

https://code.csdn.net/lindexi_gd/encryption_note

<script type="text/javascript"> $(function () { $('pre.prettyprint code').each(function () { var lines = $(this).text().split('\n').length; var $numbering = $('<ul/>').addClass('pre-numbering').hide(); $(this).addClass('has-numbering').parent().append($numbering); for (i = 1; i <= lines; i++) { $numbering.append($('<li/>').text(i)); }; $numbering.fadeIn(1700); }); }); </script>
分享到:
评论

相关推荐

    C#加密算法类库

    C#加密算法类库是一个专为.NET开发者设计的工具,它包含了多种常见的加密算法实现,以便在C#项目中方便地进行数据加密和解密。这个类库通常以.dll文件的形式提供,允许开发者通过引用该文件来直接使用其封装好的加密...

    C#加密机制实例源码-口令加密Exe【201903】

    本资源“C#加密机制实例源码-口令加密Exe【201903】”正是针对这一需求,提供了一个用C#实现的口令加密应用程序的实例源码。 口令加密是信息安全中的基础方法,通过用户提供的口令对数据进行加密,从而防止未经授权...

    C#加密算法汇总 C#加密算法

    C#加密算法汇总 C#加密算法 C#加密算法 C#加密算法

    C# 加密狗,您绝对看不懂的代码,超经典。

    这个"超经典"的C#加密狗代码可能包含了一些高级的加密算法和反逆向工程的技巧,使得它看起来难以理解。 加密狗通常通过USB接口与计算机连接,并通过特定的驱动程序与软件进行通信。在C#中,我们可以使用System.IO....

    C#加密算法汇总

    ### C#加密算法概述 C#作为一种广泛使用的编程语言,提供了丰富的库来支持各种加密算法,包括但不限于SHA1、MD5和DES等。这些算法在数据保护、用户认证和网络安全方面应用广泛。 #### SHA1加密 SHA1(Secure Hash...

    C#加密和解密

    C#加密和解密C#加密和解密C#加密和解密C#加密和解密

    C# 加密解密 将自己的文件加密

    C# 加密解密 将自己的文件加密 //选择加密、解密文件 private void button1_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { textBox1.Text = openFileDialog1....

    c#加密解密类源码

    在.NET框架中,C#语言提供了丰富的加密和解密功能,可以用于保护数据的安全性,防止未经授权的访问。本文将详细解析C#中加密解密的相关...提供的源码可能包含了上述方法的实现,对于深入学习C#加密解密技术非常有价值。

    C#加密 解密对接java 的加密AES/CBC/PKCS7Padding 转16进制.rar

    在《C#加密.txt》文档中,你可能会找到具体的C#代码示例,包括如何初始化`Aes`对象,设置加密和解密参数,以及如何进行PKCS7Padding的处理。这些代码会详细展示如何在C#环境中实现AES/CBC/PKCS7Padding加密解密,并...

    C#加密解密类及使用说明

    三、C#加密解密步骤 1. **选择合适的加密算法**:根据应用场景,如数据量、安全性需求等选择合适的加密算法。 2. **生成密钥和初始化向量(IV)**:密钥是加密的核心,必须妥善保管。IV是某些块加密算法的必需参数,...

    c#加密解密源码

    本文将围绕"C#加密解密源码"这一主题,深入探讨C#中加密解密的基本原理、常用算法以及如何通过源代码实现。 1. 加密与解密基础 - 加密:将明文转换为密文的过程,目的是保护数据的安全,防止未经授权的访问。 - ...

    c#加密文件夹源代码

    C# 加密文件夹源代码解析 C# 加密文件夹源代码是基于 C# 语言而编写的对文件夹加密的源代码。该源代码旨在使广大用户能够快捷、方便地对自己的文件夹进行加密,以保证自身的信息安全。 下面是对该源代码的详细解析...

    C#加密机制实例源码-口令加密Exe(最低分分享)

    C#加密主要依赖于.NET Framework或.NET Core提供的System.Security.Cryptography命名空间,该命名空间包含了多种加密算法,如对称加密、非对称加密、哈希函数以及数字签名等。以下是一些常用加密技术: 1. 对称加密...

    一些常见的C#加密解密类(MD5,RSA,DES,RC2...)

    本资源包含了一些常见的C#加密解密类,如MD5、RSA、DES和RC2。下面将详细阐述这些算法的工作原理及其在C#中的应用。 1. **MD5(Message-Digest Algorithm 5)** MD5是一种广泛使用的哈希函数,它将任意长度的输入...

    C# 加密解密2种方式

    在C#编程环境中,加密和解密是网络安全中不可或缺的部分,用于保护数据的隐私和安全性。本项目涉及两种加密方式:TripleDES和MD5。TripleDES(三重数据加密标准)是一种对称加密算法,而MD5(消息摘要算法5)则是一...

    c#加密指定的txt文件

    以AES为例,以下是一段使用C#加密TXT文件的示例代码: ```csharp using System.IO; using System.Security.Cryptography; public static void EncryptFile(string inputFile, string outputFile, byte[] key, byte...

    强大的NET C#加密软件

    强大的NET C#加密软件 防止反编译 反混淆,非常好用..

    c#加密解密c#加密解密c#加密解密c#加密解密c#加密解密c#加密解密

    二、C#加密解密的API C#提供了System.Security.Cryptography命名空间,其中包含了许多加密和解密的类和方法。主要的API有: 1. Aes:高级加密标准(AES),一种对称加密算法,速度快,安全性高。 2. Rijndael:...

    C# 加密文件

    本文将深入探讨C#中加密文件的相关知识点,以及如何利用这些知识来创建一个功能强大的文件加密程序。 首先,让我们了解一下加密的基本概念。加密是将明文数据转换成看似随机的密文,以保护数据不被未经授权的用户...

    C#加密解密(自定义加密字符)

    带加密字符的 加密 解密方法 static string encryptKey = "加密字符"; 自定义加密字符(加密解密必须一致才能解密) ///   /// 加密字符串 ///   ///  name="str"&gt;要加密的字符串  /// 加密后的...

Global site tag (gtag.js) - Google Analytics