看到好多加密算法,觉得自己写一个比较好。
网上保密密码的软件很多,但是不相信,自己写的,强度差也是保密强。
我是用哈希加密。
核心:移位,字符加密,填补空白。首先建立一个空白的字符串,指定长度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
{
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;
}
}
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;
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;
}
}
temp_str[has] = (char)((str[i]) + key[key_place]);
key_place++;
if (key_place == key.Length)
{
key_place = 0;
}
}
for (i = 0; i < _temp_string_lenth; i++)
{
if (temp_str[i] == Convert.ToChar(0))
{
temp_str[i] = Convert.ToChar(ran);
}
}
string s = new string(temp_str);
return s;
}
public string decryption(string str)
{
StringBuilder temp = new StringBuilder();
char[] jie = str.ToCharArray();
int 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)
{
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);
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;
}
}
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;
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#加密算法类库是一个专为.NET开发者设计的工具,它包含了多种常见的加密算法实现,以便在C#项目中方便地进行数据加密和解密。这个类库通常以.dll文件的形式提供,允许开发者通过引用该文件来直接使用其封装好的加密...
本资源“C#加密机制实例源码-口令加密Exe【201903】”正是针对这一需求,提供了一个用C#实现的口令加密应用程序的实例源码。 口令加密是信息安全中的基础方法,通过用户提供的口令对数据进行加密,从而防止未经授权...
C#加密算法汇总 C#加密算法 C#加密算法 C#加密算法
这个"超经典"的C#加密狗代码可能包含了一些高级的加密算法和反逆向工程的技巧,使得它看起来难以理解。 加密狗通常通过USB接口与计算机连接,并通过特定的驱动程序与软件进行通信。在C#中,我们可以使用System.IO....
### C#加密算法概述 C#作为一种广泛使用的编程语言,提供了丰富的库来支持各种加密算法,包括但不限于SHA1、MD5和DES等。这些算法在数据保护、用户认证和网络安全方面应用广泛。 #### SHA1加密 SHA1(Secure Hash...
C#加密和解密C#加密和解密C#加密和解密C#加密和解密
C# 加密解密 将自己的文件加密 //选择加密、解密文件 private void button1_Click(object sender, EventArgs e) { if (openFileDialog1.ShowDialog() == DialogResult.OK) { textBox1.Text = openFileDialog1....
在.NET框架中,C#语言提供了丰富的加密和解密功能,可以用于保护数据的安全性,防止未经授权的访问。本文将详细解析C#中加密解密的相关...提供的源码可能包含了上述方法的实现,对于深入学习C#加密解密技术非常有价值。
在《C#加密.txt》文档中,你可能会找到具体的C#代码示例,包括如何初始化`Aes`对象,设置加密和解密参数,以及如何进行PKCS7Padding的处理。这些代码会详细展示如何在C#环境中实现AES/CBC/PKCS7Padding加密解密,并...
三、C#加密解密步骤 1. **选择合适的加密算法**:根据应用场景,如数据量、安全性需求等选择合适的加密算法。 2. **生成密钥和初始化向量(IV)**:密钥是加密的核心,必须妥善保管。IV是某些块加密算法的必需参数,...
本文将围绕"C#加密解密源码"这一主题,深入探讨C#中加密解密的基本原理、常用算法以及如何通过源代码实现。 1. 加密与解密基础 - 加密:将明文转换为密文的过程,目的是保护数据的安全,防止未经授权的访问。 - ...
C# 加密文件夹源代码解析 C# 加密文件夹源代码是基于 C# 语言而编写的对文件夹加密的源代码。该源代码旨在使广大用户能够快捷、方便地对自己的文件夹进行加密,以保证自身的信息安全。 下面是对该源代码的详细解析...
C#加密主要依赖于.NET Framework或.NET Core提供的System.Security.Cryptography命名空间,该命名空间包含了多种加密算法,如对称加密、非对称加密、哈希函数以及数字签名等。以下是一些常用加密技术: 1. 对称加密...
本资源包含了一些常见的C#加密解密类,如MD5、RSA、DES和RC2。下面将详细阐述这些算法的工作原理及其在C#中的应用。 1. **MD5(Message-Digest Algorithm 5)** MD5是一种广泛使用的哈希函数,它将任意长度的输入...
在C#编程环境中,加密和解密是网络安全中不可或缺的部分,用于保护数据的隐私和安全性。本项目涉及两种加密方式:TripleDES和MD5。TripleDES(三重数据加密标准)是一种对称加密算法,而MD5(消息摘要算法5)则是一...
以AES为例,以下是一段使用C#加密TXT文件的示例代码: ```csharp using System.IO; using System.Security.Cryptography; public static void EncryptFile(string inputFile, string outputFile, byte[] key, byte...
强大的NET C#加密软件 防止反编译 反混淆,非常好用..
二、C#加密解密的API C#提供了System.Security.Cryptography命名空间,其中包含了许多加密和解密的类和方法。主要的API有: 1. Aes:高级加密标准(AES),一种对称加密算法,速度快,安全性高。 2. Rijndael:...
本文将深入探讨C#中加密文件的相关知识点,以及如何利用这些知识来创建一个功能强大的文件加密程序。 首先,让我们了解一下加密的基本概念。加密是将明文数据转换成看似随机的密文,以保护数据不被未经授权的用户...
带加密字符的 加密 解密方法 static string encryptKey = "加密字符"; 自定义加密字符(加密解密必须一致才能解密) /// /// 加密字符串 /// /// name="str">要加密的字符串 /// 加密后的...