栅栏密码是一种简单的移动字符位置的加密方法,规则简单,容易破解。栅栏密码的加密方式:把文本按照一定的字数分成多个组,取每组第一个字连起来得到密文1,再取每组第二个字连起来得到密文2……最后把密文1、密文2……连成整段密文。
简单来说,栅栏密码就是把一个明文(去掉空格)分成n组,每组m个,然后一定的排序方法来将这些字符重新组合。通过m的大小称其为m栏栅栏密码,比较常见的m取2,即2栏栅栏密码。例如:
明文:栅栏密码加密规则示例
每组字数:5
按照字数先把明文分成:
栅栏密码加
密规则示例
先取每组第一个字:栅密
再取每组第二个字:栏规
……
最后得到“栅密栏规密则码示加例”。
解密则反推:
密文被分成2个字一组:
栅密
栏规
密则
码示
加例
先取每组第一个字:栅栏密码加
再取每组第二个字:密规则示例
最后得到“栅栏密码加密规则示例”。
提示:当前的栅栏密码程序不删除空格和换行符。
明文或密文中如果出现连续空格将原样保留,复制到其它地方时连续空格可能会变成一个空格,注意保持原样。
在进行多行文本(段落)加密时,每行独立进行加密。
数字签名机制和简单加密的区别分别是:
数字签名机制是:所谓数字签名就是附加在数据单元上的一些数据,或是对数据单元所作的密码变换。
这种数据或变换允许数据单元的接收者用以确认数据单元的来源和数据单元的完整性并保护数据,防止被人(例如接收者)进行伪造。
简单加密是:简单加密的基本过程,就是对原来为明文的文件或数据按 某种算法 进行处理,使其成为 不可读 的一段代码,通常称为 “密文”。通过这样的途径,来达到 保护数据 不被 非法人窃取、阅读的目的。
简单加密方式的种类有:
1、凯撒加密:凯撒密码(Caesar)加密时会将明文中的 每个字母 都按照其在字母表中的顺序向后(或向前)移动固定数目(循环移动)作为密文。
2、单表代换:随机选取字母代替原来的字母顺序表,故一共有26!-1种可能。
3、一次一密:一次一密乱码本是一个大的不重复的真随机密钥字母集,这个密钥字母集被写在几张纸上,并被粘成一个乱码本。
4、栅栏加密法:栅栏加密法将明文分为若干栏(行),每个栏的字母数量相同与key相同,如meet me after party,首先骂我们去掉空格。
明文就变为meetmeafterparty。一共16个字母,key为4,则我们可以将其分为16/key=4栏,从上到下排列,每栏个字母个数为4。
1、RSA算法密码
RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。RSA算法是一种非对称密码算法,所谓非对称,就是指该算法需要一对密钥,使用其中一个加密,则需要用另一个才能解密。
2、ECC加密法密码
ECC算法也是一个能同时用于加密和数字签名的算法,也易于理解和操作。同RSA算法是一样是非对称密码算法使用其中一个加密,用另一个才能解密。
3、三分密码
首先随意制造一个3个3×3的Polybius方格替代密码,包括26个英文字母和一个符号。然后写出要加密的讯息的三维坐标。讯息和坐标四个一列排起,再顺序取横行的数字,三个一组分开,将这三个数字当成坐标,找出对应的字母,便得到密文。
4、栅栏加密法密码
栅栏加密法是一种比较简单快捷的加密方法。栅栏加密法就是把要被加密的文件按照一上一下的写法写出来,再把第二行的文字排列到第一行的后面。
5、针孔加密法密码
这种加密法诞生于近代。由于当时邮费很贵,但是寄送报纸则花费很少。于是人们便在报纸上用针在需要的字下面刺一个孔,等到寄到收信人手里,收信人再把刺有孔的文字依次排列,连成文章。
修改后运行结果:
a. 加密
1.进行栅栏加密
2.进行栅栏解密
请选择: 1
请输入分组数目 2
请输入列排编号 21
请输明文 abcdefgh
b a
d c
f e
h g
b. 解密
1.进行栅栏加密
2.进行栅栏解密
请选择: 2
请输入分组数目 2
请输入列排编号 21
请输密文 b a d c f e h g
abcdefgh
修改后的代码:
def Encrypt(n,col,M):
row=len(M)/n
if len(M)%n0:
row+=1
arr=[[""for x in range(0,n)] for y in range(0,row)]
x=0
for i in range(0,row):
for j in range(0,n):
if xlen(M):
arr[i][j]=M[x]
#print M[x],
x+=1
#print "\r\n"
for i in range(0,row):
for j in range(0,n):
m=int(col[j])-1
print arr[i][m],
print "\r\n"
def Decrypt(n, col, C):
C="".join(C.split())
row=len(C)/n
if len(C)%n0:
row+=1
arr=[[""for x in range(0,n)] for y in range(0,row)]
x=0
for i in range(0,row):
for j in range(0,n):
if xlen(C):
arr[i][j]=C[x]
#print C[x],
x+=1
#print "\r\n"
M=""
for i in range(0,row):
for j in range(0,n):
m=int(col[j])-1
#print arr[i][m],
M+=arr[i][m]
#print "\r\n"
print M
print u"1.进行栅栏加密\r\n2.进行栅栏解密\r\n请选择:".encode("gb2312"),
sel=raw_input()
if int(sel)==1:
print u"请输入分组数目".encode("gb2312"),
n=int(raw_input())
print u"请输入列排编号".encode("gb2312"),
col=raw_input()
print u"请输明文".encode("gb2312"),
M=raw_input()
while len(M)n*3:
print u"明文必须是分组数目的3倍".encode("gb2312")
M=raw_input()
Encrypt(n,col,M)
else :
print u"请输入分组数目".encode("gb2312"),
n=int(raw_input())
print u"请输入列排编号".encode("gb2312"),
col=raw_input()
print u"请输密文".encode("gb2312"),
C=raw_input()
while len(C)n*3:
print u"密文必须是分组数目的3倍".encode("gb2312")
C=raw_input()
Decrypt(n,col,C)
1.猪圈密码
lt;img src="" data-rawwidth="406" data-rawheight="107" class="sisifanyi1803-fd92-68f8-1f66 content_image" width="406"g
猪圈密码:这个图形对应下图就是HORSE
lt;img src="" data-rawwidth="225" data-rawheight="227" class="sisifanyifd92-68f8-1f66-9459 content_image" width="225"gt;
2.摩斯密码
lt;img src="" data-rawwidth="476" data-rawheight="191" class="sisifanyi68f8-1f66-9459-5874 origin_image zh-lightbox-thumb" width="476" data-original=""gt;
3.QWE加密
lt;img src="" data-rawwidth="545" data-rawheight="163" class="sisifanyi1f66-9459-5874-33f8 origin_image zh-lightbox-thumb" width="545" data-original=""gt;
键盘按ABC的顺序排列得到对应的字母,Q=A,W=B....
4.栅栏加密
加密过程:
如果我们想要加密一句话,比如:
Hello World;
这时候我们先把话中的空格去掉:
HelloWorld;
然后,我们先数一数这句话中有多少个字:
10个;
那么分栏,10个可以分成2*5栏,那么产生如下效果;
H e l l o
W o r l d;
上下对齐进行重新拼写;
HWeolrllod;
OK,加密完了。
解密过程:IILYOAVNEBSAHR,这一串是14个字母,以2个字符为1栏,排列成7*2的矩阵:
II
LY
OA
VN
EB
SA
HR
再竖向往下读:ILOVESHIYANBAR
5.当铺密码当铺密码就是一种将中文和数字进行转化的密码,算法相当简单:当前汉字有多少笔画出头,就是转化成数字几。例如:
王夫 井工 夫口 由中人 井中 夫夫 由中大:
67 84 70 123 82 77 125