-
没有任何黑客能够破解的加密算法
资源介绍
打败所有黑客 Beat All Hackers
【欢迎转载或翻译该文】
现在上网,难免会涉及一些需要保密的内容,比如密码,账号,卡号,证件号等。但是黑客无处不在,他们常常窃听你的信息,给你放置陷阱,让你的防不胜防。
比如我现在要将信息“账号:123456,密码:567890” 从A经过B传递到C,黑客可能从中间环节B截取你传输的信息。我们日常交换的信息量是很大的,黑客怎么知道现在传输的就是“密码”或“账号”呢?那么他就会设定关键词,比如“密码”,凡是含有该关键词的信息都会被截获,而其他信息就会被放掉。
你可能会讲,你传输的信息都是通过加密的,对!这就是关键的地方,现在已经有很多加密算法,他们将我们传输的数据进行加密,但是请注意,既然可以加密就可以解密,你可能从网络上早已了解到,很多加密算法是如何的厉害,一台PC要暴利破解要多少年!可是你忽略了,黑客可能比你的计算机好,他也可能控制肉鸡帮他计算,他破解的速度可能远远超出你的想象。
同时,你必须注意,现在很多加密算法,加密部分都是掌握在别人手上,比如你通过及时通讯或email将信息传递给你的朋友,一般加密都是掌握在即时通讯提供方,和email提供方,如果被黑客利用,你的信息将视同于没有加密。或者黑客可以对其陷阱预设解密方法和密钥,一旦检测到就进行解密。所以你最好自己对信息加密!
现在问题是,黑客对你信息不能解密的放过,能够解密的再留下破解。你的信息仍然处于危险之中。于是有了我现在所说的这种加密方法,非函数不校检的加密方法。
加密思想:
原始文本:1234567890
密钥:123
首先如果密钥第一位为1,则将原始明文,逐位交换变成2143658709.
其次如果密钥第二位为2,则继续进行两两交换,变成4321876509
再次如果密钥第三位为3,则继续三三交换,变成1874326509
密钥是什么可以自己限定,交换方式也可以自己设定,你可以逐位交换,也可以跳转交换,也可以按密文所在位的值进行交换。主要思想就是,乱序。那么所有排列的数量就与你原始明文的长度密切相关,比如10位,所有可能就是P10的全排列。不同密码,可能加密出同样的结果。但是如果把一个字符按64位或256位处理,短短的10位字符,已经不再只有P10的全排列个结果。
关键点:不管你的计算机有多快,你每次只能解密一次!而且计算机不会告诉你是否解密正确,必须要你自己判断!即使黑客知道怎么解密也不好下手,即使他们做出所有的排列,也必须一个一个去判断哪一个正确。这是任何一个黑客都无法忍受的!而且排序很耗资源,即使其自定义一些检测方法也于事无补。
先看个例子:
原始明文“天上密密麻麻布满乌云,码头上的船也整整齐齐的排列在一起,等待暴风雨的来临!”
密码:235312336232
结果:“上密码天密麻满乌船的云布上暴列头风,齐齐,起麻整一的的在等排雨也来待整临!”
全句含标点37个字符,两个“密”一个“码”,现在只考虑一个“密”跟“码”结合组合成“密码”关键词,而且只考虑排在句首,那么组合形式就达P35的全排列。如果我们将这句话乱序发出,至少有P35/P37的概率触发黑客的“密码”关键词陷阱。打个比方就是,猎人在一条道上放了陷阱,凡是靠近地面行走的动物才会触发机关,现在是风吹一下就会触发机关。无穷的信息量将使黑客的陷阱充满无用信息,让其降低真正窃密的几率!
迫切性,大家都在说云计算时代来了,软件不用装了,海量信息可以存储到服务器上,走到哪里就在那里提取,但是你能保证你在服务器上的信息不泄露吗?怎么办?我的建议是,利用上面的加密思想进行加密,任何人想要暴利破解都不行,而你只需要输入密码,很快就可以确定那就是你的原始信息!
1, 自己编译软件:首先如果你可以自己根据代码设置自己的算法(改变交换位置即可)和密码,然后自己编译成软件,那么加密方法就是你一个人独有的。
2, 添加浏览器插件:也可以为你的IE,Maxthon,firefox,opera等浏览器或其他工具添加插件。
这样你可以在发email或者写网上日志时使用。比如你想记录自己的日常生活,记在自己电脑上怕遗失,记在网上又怕被黑客攻击而泄露,所以这时你需要这个简单有效的加密方式,不增加内容的长度,看上去也跟别的日志没有区别,要看的时候,自己输入密码看就是,如果是IE等浏览器有插件设置好的话,还可以免去这些繁复的操作,自动加密和解密!
你的空间或博客可能设置有密码,如果你再通过这种方式对你写的日记加密,即使别人破解了你的空间密码,或博客出现漏洞,你的信息也不会被泄露。该方法也可以对文件和图片进行加密,比如图片,可以按照一个一个像素的交换,这样加密的图片是很难破解的,但是你根据你的密码可以轻松的还原。防止你的秘密相册被偷看。
这个当然也可以用于其他信息加密,比如声音加密,防止非法窃听!
C#编程外行,可能用的很不科学,特别是容错机制,但基本思想已经表达,代码还有很多bug,有建议的请跟帖到:sosecretblog.blogspot.com
利用该方法加密,然后再结合其他加密方式,比如AES,DES等,可以有效的保证你的数据安全!
C#源代码:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
namespace NumberAntiHack
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
//----------Enumber Start-----------
#region estring1-------
//-----estring1-------------
private string estring1(string origin)
{
try
{
char[] ori = origin.ToCharArray();
int len = ori.Length;
char[] after = new char[len];
//-----COPY ori to after
for (int i = 0; i < len; i++)
{
after[i] = ori[i];
}
//---transfer 1 by 1
for (int i = 1; i <= (len / 2); i++)
{
int j = i * 2;
after[j - 2] = ori[j - 1];
after[j - 1] = ori[j - 2];
}
string last = new string(after);
return last;
}
catch
{ return origin; }
}
//-----estring1-------end----------
#endregion
#region estring2-------
//-----estring2-------------
private string estring2(string origin)
{
try
{
char[] ori = origin.ToCharArray();
int len = ori.Length;
char[] after = new char[len];
for (int i = 0; i < len; i++)
{
after[i] = ori[i];
}
//---transfer 2 by 2
for (int i = 1; i <= (len / 4); i++)
{
int j = i * 4;
after[j - 2] = ori[j - 4];
after[j - 1] = ori[j - 3];
after[j - 4] = ori[j - 2];
after[j - 3] = ori[j - 1];
}
string last = new string(after);
return last;
}
catch
{ return origin; }
}
//-----estring2-------end----------
#endregion
#region estring3-------
//-----estring3-------------
private string estring3(string origin)
{
try
{
char[] ori = origin.ToCharArray();
int len = ori.Length;
char[] after = new char[len];
for (int i = 0; i < len; i++)
{
after[i] = ori[i];
}
//transfer 3 by 3
for (int i = 1; i <= (len / 6); i++)
{
int j = i * 6;
after[j - 6] = ori[j - 3];
after[j - 5] = ori[j - 2];
after[j - 4] = ori[j - 1];
after[j - 3] = ori[j - 6];
after[j - 2] = ori[j - 5];
after[j - 1] = ori[j - 4];
}
string last = new string(after);
return last;
}
catch
{ return origin; }
}
//-----estring3-------end----------
#endregion
#region estring4-------
//-----estring4-------------
private string estring4(string origin)
{
try
{
char[] ori = origin.ToCharArray();
int len = ori.Length;
char[] after = new char[len];
for (int i = 0; i < len; i++)
{
after[i] = ori[i];
}
//transfer 4 by 4
for (int i = 1; i <= (len / 8); i++)
{
int j = i * 8;
after[j - 8] = ori[j - 4];
after[j - 7] = ori[j - 3];
after[j - 6] = ori[j - 2];
after[j - 5] = ori[j - 1];
after[j - 4] = ori[j - 8];
after[j - 3] = ori[j - 7];
after[j - 2] = ori[j - 6];
after[j - 1] = ori[j - 5];
}
string last = new string(after);
return last;
}
catch
{ return origin; }
}
//-----estring4-------end----------
#endregion
#region estring5-------
//-----estring5-------------
private string estring5(string origin)
{
try
{
char[] ori = origin.ToCharArray();
int len = ori.Length;
char[] after = new char[len];
for (int i = 0; i < len; i++)
{
after[i] = ori[i];
}
//transfer 5 by 5
for (int i = 1; i <= (len / 10); i++)
{
int j = i * 10;
after[j - 10] = ori[j - 5];
after[j - 9] = ori[j - 4];
after[j - 8] = ori[j - 3];
after[j - 7] = ori[j - 2];
after[j - 6] = ori[j - 1];
after[j - 5] = ori[j - 10];
after[j - 4] = ori[j - 9];
after[j - 3] = ori[j - 8];
after[j - 2] = ori[j - 7];
after[j - 1] = ori[j - 6];
}
string last = new string(after);
return last;
}
catch
{ return origin; }
}
//-----estring5-------end----------
#endregion
#region estring6-------
//-----estring6-------------
private string estring6(string origin)
{
try
{
char[] ori = origin.ToCharArray();
int len = ori.Length;
char[] after = new char[len];
for (int i = 0; i < len; i++)
{
after[i] = ori[i];
}
//transfrt 6 by 6
for (int i = 1; i <= (len / 12); i++)
{
int j = i * 12;
after[j - 12] = ori[j - 6];
after[j - 11] = ori[j - 5];
after[j - 10] = ori[j - 4];
after[j - 9] = ori[j - 3];
after[j - 8] = ori[j - 2];
after[j - 7] = ori[j - 1];
after[j - 6] = ori[j - 12];
after[j - 5] = ori[j - 11];
after[j - 4] = ori[j - 10];
after[j - 3] = ori[j - 9];
after[j - 2] = ori[j - 8];
after[j - 1] = ori[j - 7];
}
string last = new string(after);
return last;
}
catch
{ return origin; }
}
//-----estring6-------end----------
#endregion
#region estring7-------
//-----estring7-------------
private string estring7(string origin)
{
try
{
char[] ori = origin.ToCharArray();
int len = ori.Length;
char[] after = new char[len];
for (int i = 0; i < len; i++)
{
after[i] = ori[i];
}
//transfer 7 by 7
for (int i = 1; i <= (len / 14); i++)
{
int j = i * 14;
after[j - 14] = ori[j - 7];
after[j - 13] = ori[j - 6];
after[j - 12] = ori[j - 5];
after[j - 11] = ori[j - 4];
after[j - 10] = ori[j - 3];
after[j - 9] = ori[j - 2];
after[j - 8] = ori[j - 1];
after[j - 7] = ori[j - 14];
after[j - 6] = ori[j - 13];
after[j - 5] = ori[j - 12];
after[j - 4] = ori[j - 11];
after[j - 3] = ori[j - 10];
after[j - 2] = ori[j - 9];
after[j - 1] = ori[j - 8];
}
string last = new string(after);
return last;
}
catch
{ return origin; }
}
//-----estring7-------end----------
#endregion
#region estring8-------
//-----estring8-------------
private string estring8(string origin)
{
try
{
char[] ori = origin.ToCharArray();
int len = ori.Length;
char[] after = new char[len];
for (int i = 0; i < len; i++)
{
after[i] = ori[i];
}
//transfer 8 by 8
for (int i = 1; i <= (len / 16); i++)
{
int j = i * 16;
after[j - 16] = ori[j - 8];
after[j - 15] = ori[j - 7];
after[j - 14] = ori[j - 6];
after[j - 13] = ori[j - 5];
after[j - 12] = ori[j - 4];
after[j - 11] = ori[j - 3];
after[j - 10] = ori[j - 2];
after[j - 9] = ori[j - 1];
after[j - 8] = ori[j - 16];
after[j - 7] = ori[j - 15];
after[j - 6] = ori[j - 14];
after[j - 5] = ori[j - 13];
after[j - 4] = ori[j - 12];
after[j - 3] = ori[j - 11];
after[j - 2] = ori[j - 10];
after[j - 1] = ori[j - 9];
}
string last = new string(after);
return last;
}
catch
{ return origin; }
}
//-----estring8-------end----------
#endregion
#region estring9-------
//-----estring9-------------
private string estring9(string origin)
{
try
{
char[] ori = origin.ToCharArray();
int len = ori.Length;
char[] after = new char[len];
for (int i = 0; i < len; i++)
{
after[i] = ori[i];
}
//transfer 9 by 9
for (int i = 1; i <= (len / 18); i++)
{
int j = i * 18;
after[j - 18] = ori[j - 9];
after[j - 17] = ori[j - 8];
after[j - 16] = ori[j - 7];
after[j - 15] = ori[j - 6];
after[j - 14] = ori[j - 5];
after[j - 13] = ori[j - 4];
after[j - 12] = ori[j - 3];
after[j - 11] = ori[j - 2];
after[j - 10] = ori[j - 1];
after[j - 9] = ori[j - 18];
after[j - 8] = ori[j - 17];
after[j - 7] = ori[j - 16];
after[j - 6] = ori[j - 15];
after[j - 5] = ori[j - 14];
after[j - 4] = ori[j - 13];
after[j - 3] = ori[j - 12];
after[j - 2] = ori[j - 11];
after[j - 1] = ori[j - 10];
}
string last = new string(after);
return last;
}
catch
{ return origin; }
}
//-----estring9-------end----------
#endregion
#region estring0-------
//-----estring0-------------
private string estring0(string origin)
{
try
{
char[] ori = origin.ToCharArray();
int len = ori.Length;
char[] after = new char[len];
for (int i = 0; i < len; i++)
{
after[i] = ori[i];
}
//transfer 10 by 10
for (int i = 1; i <= (len / 20); i++)
{
int j = i * 20;
after[j - 20] = ori[j - 10];
after[j - 19] = ori[j - 9];
after[j - 18] = ori[j - 8];
after[j - 17] = ori[j - 7];
after[j - 16] = ori[j - 6];
after[j - 15] = ori[j - 5];
after[j - 14] = ori[j - 4];
after[j - 13] = ori[j - 3];
after[j - 12] = ori[j - 2];
after[j - 11] = ori[j - 1];
after[j - 10] = ori[j - 20];
after[j - 9] = ori[j - 19];
after[j - 8] = ori[j - 18];
after[j - 7] = ori[j - 17];
after[j - 6] = ori[j - 16];
after[j - 5] = ori[j - 15];
after[j - 4] = ori[j - 14];
after[j - 3] = ori[j - 13];
after[j - 2] = ori[j - 12];
after[j - 1] = ori[j - 11];
}
string last = new string(after);
return last;
}
catch
{ return origin; }
}
//-----estring0-------end----------
#endregion
//-------------------Enumber End-------------
private void button1_Click(object sender, EventArgs e)
{
if (textBox3 == null)
{
MessageBox.Show("No Password");
}
else
{ if (textBox1 == null)
{
MessageBox.Show("No words need to Encrypt");
}
else
{
string key = textBox3.Text;
char[] keyword = key.ToCharArray();
int keylen = keyword.Length;
string origin = textBox1.Text;
//---选择方法---
for (int i = 0; i < keylen; i++)
{
if (keyword [i]=='1')
{ origin =estring1(origin);}
else if(keyword [i]=='2')
{ origin =estring2(origin);}
else if (keyword[i] == '3')
{ origin = estring3(origin);}
else if (keyword[i] == '4')
{ origin = estring4(origin); }
else if (keyword[i] == '5')
{ origin = estring5(origin); }
else if (keyword[i] == '6')
{ origin = estring6(origin); }
else if (keyword[i] == '7')
{ origin = estring7(origin); }
else if (keyword[i] == '8')
{ origin = estring8(origin); }
else if (keyword[i] == '9')
{ origin = estring9(origin); }
else if (keyword[i] == '0')
{ origin = estring0(origin); }
else
{ break; }
}
string last = origin;
textBox2.Clear();
textBox2.AppendText(last);
};
}
}
private void Form1_Load(object sender, EventArgs e)
{
}
private void textBox1_TextChanged(object sender, EventArgs e)
{
}
private void textBox2_TextChanged(object sender, EventArgs e)
{
}
private void textBox3_TextChanged(object sender, EventArgs e)
{
}
private void button2_Click(object sender, EventArgs e)
{
if (textBox3 == null)
{
MessageBox.Show("No Password");
}
else
{
if (textBox1 == null)
{
MessageBox.Show("No words need to Encrypt");
}
else
{
string key = textBox3.Text;
char[] keyword = key.ToCharArray();
int keylen = keyword.Length;
string origin = textBox1.Text;
//---选择方法---
for (int i = keylen-1 ; i >= 0; i--)
{
if (keyword[i] == '1')
{ origin = estring1(origin); }
else if (keyword[i] == '2')
{ origin = estring2(origin); }
else if (keyword[i] == '3')
{ origin = estring3(origin); }
else if (keyword[i] == '4')
{ origin = estring4(origin); }
else if (keyword[i] == '5')
{ origin = estring5(origin); }
else if (keyword[i] == '6')
{ origin = estring6(origin); }
else if (keyword[i] == '7')
{ origin = estring7(origin); }
else if (keyword[i] == '8')
{ origin = estring8(origin); }
else if (keyword[i] == '9')
{ origin = estring9(origin); }
else if (keyword[i] == '0')
{ origin = estring0(origin); }
else
{ break; }
}
string last = origin;
textBox2.Clear();
textBox2.AppendText(last);
};
}
}
private void button3_Click(object sender, EventArgs e)
{
if (textBox3 == null)
{
MessageBox.Show("No Password");
}
else
{
if (textBox1 == null)
{
MessageBox.Show("No words need to Encrypt");
}
else
{
string key = textBox3.Text;
char[] keyword = key.ToCharArray();
int keylen = keyword.Length;
//-----将输入字符串的二进制按字符串处理---
string ori1 = textBox1.Text;
char[] ori2 = ori1.ToCharArray();
byte[] ori3 = System.Text.Encoding.Default.GetBytes(ori2);
String origin = Convert .ToBase64String(ori3);
//---选择方法---
for (int i = 0; i < keylen; i++)
{
if (keyword[i] == '1')
{ origin = estring1(origin); }
else if (keyword[i] == '2')
{ origin = estring2(origin); }
else if (keyword[i] == '3')
{ origin = estring3(origin); }
else if (keyword[i] == '4')
{ origin = estring4(origin); }
else if (keyword[i] == '5')
{ origin = estring5(origin); }
else if (keyword[i] == '6')
{ origin = estring6(origin); }
else if (keyword[i] == '7')
{ origin = estring7(origin); }
else if (keyword[i] == '8')
{ origin = estring8(origin); }
else if (keyword[i] == '9')
{ origin = estring9(origin); }
else if (keyword[i] == '0')
{ origin = estring0(origin); }
else
{ break; }
}
string last = origin;
textBox2.Clear();
textBox2.AppendText(last);
};
}
}
private void button4_Click(object sender, EventArgs e)
{
if (textBox3 == null)
{
MessageBox.Show("No Password");
}
else
{
if (textBox1 == null)
{
MessageBox.Show("No words need to Encrypt");
}
else
{
string key = textBox3.Text;
char[] keyword = key.ToCharArray();
int keylen = keyword.Length;
//---将二进制转回----
string origin = textBox1.Text.ToString();
//---选择方法---
for (int i = keylen - 1; i >= 0; i--)
{
if (keyword[i] == '1')
{ origin = estring1(origin); }
else if (keyword[i] == '2')
{ origin = estring2(origin); }
else if (keyword[i] == '3')
{ origin = estring3(origin); }
else if (keyword[i] == '4')
{ origin = estring4(origin); }
else if (keyword[i] == '5')
{ origin = estring5(origin); }
else if (keyword[i] == '6')
{ origin = estring6(origin); }
else if (keyword[i] == '7')
{ origin = estring7(origin); }
else if (keyword[i] == '8')
{ origin = estring8(origin); }
else if (keyword[i] == '9')
{ origin = estring9(origin); }
else if (keyword[i] == '0')
{ origin = estring0(origin); }
else
{ break; }
}
string last = origin;
byte[] last1 = Convert.FromBase64String(last);
char[] last2 = System.Text.Encoding.Default.GetChars(last1);
string last3 = new string(last2);
textBox2.Clear();
textBox2.AppendText(last3);
};
}
}
private void pictureBox1_Click(object sender, EventArgs e)
{
//--访问主页:http://www.sosecret.net 专注个人隐私保护
System.Diagnostics.Process.Start("http://www.sosecret.net");
}
}
}
挑战:有一个2万字符左右的加密文件,接受任何人的破解测试,论坛无法贴,请到blog留下联系方式,我将发送密文。
- 上一篇: DetoursDemo.zip
- 下一篇: AES加解密程序