精华内容
参与话题
问答
  • C# 加密

    千次阅读 2015-05-01 14:20:56
    所以需要一个地方来保存自己的密码,网上有很多软件,但是信不过,于是开发了自己的加密记事本,用来记录隐秘的文本。 网上保密密码的软件很多,但是不相信,自己写的,强度差也是保密强。 我是用哈希加密

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

    核心:移位,字符加密,填补空白。首先建立一个空白的字符串,指定长度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

    展开全文
  • c#加密解密c#加密解密c#加密解密c#加密解密c#加密解密c#加密解密c#加密解密c#加密解密
  • c# 加密

    2013-11-05 16:29:24
    http://www.cnblogs.com/skylaugh/archive/2011/07/12/2103572.html http://www.cnblogs.com/wuchao/archive/2013/04/08/3007102.html
    展开全文
  • C#加密

    2009-11-30 14:06:00
    using System;using System.Security....//1、将字符串转换成字节数组//2、选择加密方式//3、不可逆加密:MD5、SHA1//4、可逆加密:DES、RC2、Rijndael//5、对密钥要求长度不同//6、加密速度不同、复杂程度不

     

    展开全文
  • c#加密解密加密解密加密解密加密解密加密解密c#加密解密加密解密加密解密加密解密加密解密
  • 其中在 java、c#加密转换时,最重要的是 IV 的确定,我常常用如下方法使得java和c#之间的 IV 可以转换: 将其中某个 IV 数组转为 10进制后,在转换为相应的 byte数组就好了。10进制数组成为 java、c# 中IV转换的...
    最近一直烦恼,java , c# 加密的不同,然后整理了一下,留个备份的轮子:

    其中在 java、c#加密转换时,最重要的是 IV 的确定,我常常用如下方法使得java和c#之间的 IV 可以转换:
    将其中某个 IV 数组转为 10进制后,在转换为相应的 byte数组就好了。10进制数组成为 java、c# 中IV转换的桥梁了。最后分别有java(我用myeclipse)和c#的编译器(SharpDevelop2很轻量级的编译器,但是运行代码后需要在后面写上 "Console.ReadLine(); " ,不然dos框会一闪而过。这个编译器还需要系统中安装有.net 2.0或者其他版本)多多实践,这样可以更加直接的看到结果。 下面实例中java与c#的代码都是一一对应的:当然,这些加密算法并不适合所有的加密结构,但是重要的是 IV 、key 的格式化。 网上查了资料,找到java转换为16进制的方法(已测)


    // java格式化16进制输出
    public static void formatIntTo16(byte[] bytes) {
    String[] resultBytes = new String[bytes.length];
    for (int i = 0; i < bytes.length; i++) {
    resultBytes[i] = Integer.toHexString(bytes[i] & 0xFF);
    }
    }




    //MD5加密
    public static String md5Encode(String strContent) {
    try {
    MessageDigest messageDigest = MessageDigest.getInstance("MD5");
    byte[] tempBytes = messageDigest.digest(strContent.getBytes("UnicodeLittleUnmarked"));
    StringBuffer stringBuffer = new StringBuffer();
    for(byte bytes: tempBytes) {
    String tempByte = Integer.toHexString(bytes & 0xFF);
    if(tempByte.length() == 1) {
    stringBuffer.append("0");
    }
    stringBuffer.append(tempByte);
    }
    return stringBuffer.toString();
    } catch(Exception e) {
    e.printStackTrace();
    }
    return null;
    }



    //md5加密
    public static void MD5(string str) {
    string cl1 = str;
    string pwd = "";
    System.Security.Cryptography.MD5 md5 = System.Security.Cryptography.MD5.Create();
    byte[] s = md5.ComputeHash(Encoding.Unicode.GetBytes(cl1));
    for (int i = 0; i < s.Length; i++) {
    pwd = pwd + s[i].ToString("x");
    }
    Console.Write(pwd);
    Console.WriteLine();
    }



    // 3DES加密 基方法
    public static byte[] des3EncodeCBC(byte[] data, byte[] key) throws Exception {

    Key deskey = null;
    DESedeKeySpec spec = new DESedeKeySpec(key);
    SecretKeyFactory keyfactory = SecretKeyFactory.getInstance("desede");
    deskey = keyfactory.generateSecret(spec);

    Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding");
    IvParameterSpec ips = new IvParameterSpec(IV);
    cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
    return cipher.doFinal(data, 0, data.length);

    }


    // 3DES加密算法
    private static bool Encrypt( byte[] key, byte[] input, out byte[] output )
    {
    output = null;

    try
    {
    TripleDESCryptoServiceProvider trippleDesProvider = new TripleDESCryptoServiceProvider();
    ICryptoTransform encryptObj = trippleDesProvider.CreateEncryptor(rkey, IV);
    output = encryptObj.TransformFinalBlock(input, 0, input.Length);
    trippleDesProvider.Clear();
    }
    catch (Exception)
    {
    return false;
    }

    return true;
    }


    // 3DES 解密 基方法
    public static byte[] des3DecodeCBC(byte[] data, byte[] key) throws Exception {
    Key deskey = null;
    DESedeKeySpec spec = new DESedeKeySpec(key);
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("desede");
    deskey = keyFactory.generateSecret(spec);

    Cipher cipher = Cipher.getInstance("desede" + "/CBC/PKCS5Padding");
    IvParameterSpec ips = new IvParameterSpec(IV);
    cipher.init(Cipher.DECRYPT_MODE, deskey, ips);
    return cipher.doFinal(data, 0, data.length);
    }


    // 3DES 解密 基方法
    private static bool Decrypt(byte[] key, byte[] input, out byte[] output)
    {
    output = null;

    try
    {
    TripleDESCryptoServiceProvider trippleDesProvider = new TripleDESCryptoServiceProvider();
    ICryptoTransform decryptObj = trippleDesProvider.CreateDecryptor(key, IV);
    output = decryptObj.TransformFinalBlock(input, 0, input.Length);
    trippleDesProvider.Clear();
    }
    catch (Exception ex)
    {
    return false;
    }

    return true;
    }



    //DES加密
    public static String encode(byte[] key, byte[] iv, byte[] data) throws Exception {
    Key deskey = null;
    DESKeySpec spec = new DESKeySpec(key);
    SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES");
    deskey = keyFactory.generateSecret(spec);
    IvParameterSpec ips = new IvParameterSpec(iv);
    Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");
    cipher.init(Cipher.ENCRYPT_MODE, deskey, ips);
    return new BASE64Encoder().encode(cipher.doFinal(data, 0, data.length));
    }



    //DES加密
    public static string DESEncode(string encryptString, string encryptKey) {
    byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));
    byte[] rgbIV = DESKeys;
    byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);
    DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();
    MemoryStream mStream = new MemoryStream();
    CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV),
    CryptoStreamMode.Write);
    cStream.Write(inputByteArray, 0, inputByteArray.Length);
    cStream.FlushFinalBlock();
    return Convert.ToBase64String(mStream.ToArray());
    }
    展开全文
  • A加密一段URL,发给B,B用的是Java解密,而A用的是C#加密 本来也没有多大问题,可是两边没有商榷好 解密:Java利用已有password生成密钥key, ``` KeyGenerator keyGenerator = KeyGenerator.getInstance(DES); ...
  • C# 加密 MD5加密

    2018-08-24 10:50:06
    C# 加密 MD5加密 System.Web.Security.FormsAuthentication.HashPasswordForStoringInConfigFile(textBox2.Text, "MD5");
  • c# 加密解密

    2015-10-09 09:52:58
    //作用:加密解密 //作者:刘典武 //时间:2010-12-01 using System; using System.Collections.Generic; using System.Text; using System.Security.Cryptography; using System.IO; namespace Ecan { publ
  • C#加密解密

    2016-09-19 13:50:35
    一个封装好的加密解密类。
  • C#加密方法汇总

    2012-12-22 10:26:46
    C#加密方法汇总,不同加密方法实例分析!
  • c# 加密与解密

    2015-09-28 21:48:10
    三种加密方法,代码如下: using System.Security.Cryptography; using System.IO; namespace Common { /**//// /// DESEncrypt加密解密算法。 /// public sealed class DESEncrypt { pr
  • 加密字符的 加密 解密方法 static string encryptKey = "加密字符"; 自定义加密字符(加密解密必须一致才能解密) ///   /// 加密字符串 ///   ///  name="str">要加密的字符串  /// 加密后的...
  • C#加密解密Demo.zip

    2019-08-30 10:14:08
    说到加密,可能大家最熟悉的就是MD5了,一般保存密码、查看文档是否更新都是用到MD5加密,MD5加密是不可逆的,不能解密出明文。...C#里的MD5、DES、AES、RSA加密解密详细方法已封装,大家安心下载使用。
  • 请问各位大神,刚接触加密解密现遇到一个问题,需要用C#加密然后传给android端解密,我现在用的是AES加密,密钥是根据双方约定的字符串,例如用户名这种,但每次C#加密后在android端都没法解密,我查了一下应该密钥...
  • C#加密解密字符串

    千次阅读 2014-06-19 14:06:24
    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Security.Cryptography; using System.Web; using System.IO; namespace XXKey ... public class NewEncr
  • 基于TextBox基类编写的密码框,用...无需资源分,免费下载,供讨论,源码可加QQ398061026索取,加好友注明CSDN.pwdTextBox。谢谢。 添加工具栏的方法就不用提了吧!这个大家都会!不会请百度“自定义控件”,谢谢。
  • C# 加密解密字符串

    2010-03-29 11:05:06
    对字符串进行MD5和base64加密.有什么不明白的可以发邮件至shuiruci@qq.com询问.
  • C#加密概述

    千次阅读 2006-06-12 13:12:00
    C#加密概述摘要:介绍Microsoft.NET下加密技术的过程和方法。关键词:Microsoft.NET;加密技术Microsoft.NET以其强大的性能,世界级的工具支持,操作简易性,扩展性,安全性等等优点,迅速的风靡全球,随着使用者的...
  • C#加密数据

    2019-02-01 16:21:47
    与不对称密钥的加密相比,加密和解密使用不同的密钥:公钥/私钥。 如果使用一个公钥进行加密,就应该使用对应的私钥进行解密,而不是使用公钥解密。同样,如果使用一个私钥加密, 就应该使用对应的公钥解密,而...
  • C# 加密解密

    2018-12-27 16:01:00
    md5加密解密 public static string MD5(string input) { StringBuilder hash = new StringBuilder(); MD5CryptoServiceProvider md5provider = new MD5CryptoServicePr...

空空如也

1 2 3 4 5 ... 20
收藏数 7,018
精华内容 2,807
热门标签
关键字:

c#加密

c# 订阅