2023年7月31日发(作者:)

密码学(⼀)之恺撒密码(移位密码)前⾔密码学的基本⽬的是使得两个在不安全的信道上进⾏安全的通信,在计算机⽹络中,现假设有两个⼈Alice和Bob,Alice想发送消息给Bob,告诉他明天凌晨2点毒贩将在4号码头进⾏交易,请Bob配合缉毒。这⾥Alice有⼀个⿇烦就是他怕在信息传输中可能会被敌⼈Oscar监听,甚⾄篡改消息内容,导致整个计划失败,Bob也对Alice发过来的消息有疑虑,不知道消息是否为Alice本⼈所发,消息内容是否真实等等。这⾥密码学的重要性就体现出来了,假设Alice事先和Bob商量好⼀个密钥(key),Alice通过密钥将明⽂(plaintext)加密成密⽂,在⽹络中传输,Bob收到Alice传过来的密⽂(ciphertext),⽤事先商量好的密钥进⾏解密,得到明⽂,⽽敌⼈即使监听到Alice发送的消息,也是加密过的密⽂,由于不知道密钥,所以⽆法知道真实的明⽂,整个过程如下。移位密码(Shift Cipher)、恺撒密码(Caesar Cipher)移位密码是古典密码学中最早,最简单的⼀种加、解密码⽅法,最早可追溯⾄古罗马时代,尤利乌斯:恺撒曾经使⽤过此密码。移位密码是通过将明⽂中所使⽤的字母按照⼀定的字数进⾏“平移”来加密,为了简化内容,在这⾥我们只使⽤英⽂字母作为⽰例,我们⽤⼩写字母(a,b,c,d…)来表⽰明⽂,⽤⼤写字母(A,B,C,D…)来表⽰密⽂。最早期时,⼀般将字母平移3位,也就是a->D,b->E,c->F,这种最早时平移3位是叫恺撒密码(Caesar Cipher),后来经过推⼴,平移位数也不⼀定是3位,可以是其它任何整数位,这种⼜叫移位密码(Shift Cipher),可以知道,恺撒密码是移位密码的⼀个特例(key=3时),下⾯是恺撒密码平移的⼯作⽅式移位密码的加密使⽤移位密码可以⽤来加密普通的英⽂句⼦,但是我们要建⽴英⽂字母和模26剩余之间⼀⼀对应关系,如A->0,B->1,…Z->25。其列表如下:现假设我们有明⽂P=china,密钥K=3, 现要将其加密,根据上表,将字符P中的每个字母平移3位,得到如下情况:c->Fh->Ki->Ln->Qa->D⾄此,明⽂china就被转换成了密⽂FKLQD,具体⽤程序算法可归纳如下:a,⾸先将明⽂中的字母按照上表对应成相应的数字: 2 7 8 13 0b,再将上⾯的数字与密钥K=3相加: 5 10 11 16 3c,再对各个数字取模26运算,可得: 5 10 11 16 3d,最后将各数字转化为字母即可得密⽂ F K L Q D移位密码的解密移位密码的解密也⾮常简单,只要使⽤加密时⽤的密钥进⾏反向平移操作,刚来的例⼦只要将密⽂反向平移3位就⾏,可得到如下:F->cK->hL->iQ->nD->a具体程序的算法其实就是加密的反向操作,如下:a, 将密⽂转化成对应的字母 5 10 11 16 3b, 将各数字减去密钥K=3,得到如下数字 2 7 8 13 0c, 再对各个数字取模26运算,得: 2 7 8 13 0d, 最后将数字转化成字母得 c h i n a移位密码的暴⼒破解通过上⾯的例⼦可以知道,我们只要拿到的密钥K,就可以密⽂解密,那么有没有不⽤密钥就可以解密的呢,在移位密码中,密钥就是字母平移的位数,因为因为字母表⾥只有26个字母(0-25),所以加密的密钥⼀共就是0-25之间的26个数字,我们可以把26个数字全部当作密钥试⼀次,解密出来其中有⼀个明⽂肯定是对的。像这种将所有可能的密钥全部尝试⼀遍的,我们叫暴⼒破解(brute-force attack),这种⽅法本质是在所有的密钥中找出正确的那⼀个,因此⼜称为穷举搜索(exhaustive search)。可以将上⾯的例⼦通过暴⼒破解试⼀下,密钥从0开始,⼀直试到25,得到如下效果:FKLQD -> 第0次破解 -> fklqdFKLQD -> 第1次破解 -> ejkpcFKLQD -> 第2次破解 -> dijobFKLQD -> 第3次破解 -> chinaFKLQD -> 第4次破解 -> bghmzFKLQD -> 第5次破解 -> afglyFKLQD -> 第6次破解 -> zefkxFKLQD -> 第7次破解 -> ydejwFKLQD -> 第8次破解 -> xcdivFKLQD -> 第9次破解 -> wbchuFKLQD -> 第10次破解 -> vabgtFKLQD -> 第11次破解 -> uzafsFKLQD -> 第12次破解 -> tyzerFKLQD -> 第13次破解 -> sxydqFKLQD -> 第14次破解 -> rwxcpFKLQD -> 第15次破解 -> qvwboFKLQD -> 第16次破解 -> puvanFKLQD -> 第17次破解 -> otuzmFKLQD -> 第18次破解 -> nstylFKLQD -> 第19次破解 -> mrsxkFKLQD -> 第20次破解 -> lqrwjFKLQD -> 第21次破解 -> kpqviFKLQD -> 第22次破解 -> jopuhFKLQD -> 第23次破解 -> inotgFKLQD -> 第24次破解 -> hmnsfFKLQD -> 第25次破解 -> glmre脚本⽰例我们⽤脚本试⼀下上⾯所说的各种⽅法,脚本代码在这⾥#明⽂是 I am peter, I love china, 密钥是6message = "iampeterxuilovechina"caesar = 6#调⽤encoder⽅法加密出密⽂cipher = r(message) => OGSVKZKXDAORUBKINOTG#调⽤decoder⽅法解密出明⽂r(cipher) => iampeterxuilovechina#暴⼒破解OGSVKZKXDAORUBKINOTG -> 第0次破解 -> ogsvkzkxdaorubkinotgOGSVKZKXDAORUBKINOTG -> 第1次破解 -> nfrujyjwcznqtajhmnsfOGSVKZKXDAORUBKINOTG -> 第2次破解 -> meqtixivbympsziglmreOGSVKZKXDAORUBKINOTG -> 第3次破解 -> ldpshwhuaxloryhfklqdOGSVKZKXDAORUBKINOTG -> 第4次破解 -> kcorgvgtzwknqxgejkpcOGSVKZKXDAORUBKINOTG -> 第5次破解 -> jbnqfufsyvjmpwfdijobOGSVKZKXDAORUBKINOTG -> 第6次破解 -> iampeterxuilovechinaOGSVKZKXDAORUBKINOTG -> 第7次破解 -> hzlodsdqwthknudbghmzOGSVKZKXDAORUBKINOTG -> 第8次破解 -> gykncrcpvsgjmtcafglyOGSVKZKXDAORUBKINOTG -> 第9次破解 -> fxjmbqbourfilsbzefkxOGSVKZKXDAORUBKINOTG -> 第10次破解 -> ewilapantqehkraydejwOGSVKZKXDAORUBKINOTG -> 第11次破解 -> dvhkzozmspdgjqzxcdivOGSVKZKXDAORUBKINOTG -> 第12次破解 -> cugjynylrocfipywbchuOGSVKZKXDAORUBKINOTG -> 第13次破解 -> btfixmxkqnbehoxvabgtOGSVKZKXDAORUBKINOTG -> 第14次破解 -> asehwlwjpmadgnwuzafsOGSVKZKXDAORUBKINOTG -> 第15次破解 -> zrdgvkviolzcfmvtyzerOGSVKZKXDAORUBKINOTG -> 第16次破解 -> yqcfujuhnkybelusxydqOGSVKZKXDAORUBKINOTG -> 第17次破解 -> xpbetitgmjxadktrwxcpOGSVKZKXDAORUBKINOTG -> 第18次破解 -> woadshsfliwzcjsqvwboOGSVKZKXDAORUBKINOTG -> 第19次破解 -> vnzcrgrekhvybirpuvanOGSVKZKXDAORUBKINOTG -> 第20次破解 -> umybqfqdjguxahqotuzmOGSVKZKXDAORUBKINOTG -> 第21次破解 -> tlxapepciftwzgpnstylOGSVKZKXDAORUBKINOTG -> 第22次破解 -> skwzodobhesvyfomrsxkOGSVKZKXDAORUBKINOTG -> 第23次破解 -> rjvyncnagdruxenlqrwjOGSVKZKXDAORUBKINOTG -> 第24次破解 -> qiuxmbmzfcqtwdmkpqviOGSVKZKXDAORUBKINOTG -> 第25次破解 -> phtwlalyebpsvcljopuh可以知道,移位密码其实是很弱的,我们可以很容易将他破解出来,但是在古代那会还是挺有⽤的。参考资料【密码学原理与实践(第三版)】【图解密码技术】

2023年7月31日发(作者:)

密码学(⼀)之恺撒密码(移位密码)前⾔密码学的基本⽬的是使得两个在不安全的信道上进⾏安全的通信,在计算机⽹络中,现假设有两个⼈Alice和Bob,Alice想发送消息给Bob,告诉他明天凌晨2点毒贩将在4号码头进⾏交易,请Bob配合缉毒。这⾥Alice有⼀个⿇烦就是他怕在信息传输中可能会被敌⼈Oscar监听,甚⾄篡改消息内容,导致整个计划失败,Bob也对Alice发过来的消息有疑虑,不知道消息是否为Alice本⼈所发,消息内容是否真实等等。这⾥密码学的重要性就体现出来了,假设Alice事先和Bob商量好⼀个密钥(key),Alice通过密钥将明⽂(plaintext)加密成密⽂,在⽹络中传输,Bob收到Alice传过来的密⽂(ciphertext),⽤事先商量好的密钥进⾏解密,得到明⽂,⽽敌⼈即使监听到Alice发送的消息,也是加密过的密⽂,由于不知道密钥,所以⽆法知道真实的明⽂,整个过程如下。移位密码(Shift Cipher)、恺撒密码(Caesar Cipher)移位密码是古典密码学中最早,最简单的⼀种加、解密码⽅法,最早可追溯⾄古罗马时代,尤利乌斯:恺撒曾经使⽤过此密码。移位密码是通过将明⽂中所使⽤的字母按照⼀定的字数进⾏“平移”来加密,为了简化内容,在这⾥我们只使⽤英⽂字母作为⽰例,我们⽤⼩写字母(a,b,c,d…)来表⽰明⽂,⽤⼤写字母(A,B,C,D…)来表⽰密⽂。最早期时,⼀般将字母平移3位,也就是a->D,b->E,c->F,这种最早时平移3位是叫恺撒密码(Caesar Cipher),后来经过推⼴,平移位数也不⼀定是3位,可以是其它任何整数位,这种⼜叫移位密码(Shift Cipher),可以知道,恺撒密码是移位密码的⼀个特例(key=3时),下⾯是恺撒密码平移的⼯作⽅式移位密码的加密使⽤移位密码可以⽤来加密普通的英⽂句⼦,但是我们要建⽴英⽂字母和模26剩余之间⼀⼀对应关系,如A->0,B->1,…Z->25。其列表如下:现假设我们有明⽂P=china,密钥K=3, 现要将其加密,根据上表,将字符P中的每个字母平移3位,得到如下情况:c->Fh->Ki->Ln->Qa->D⾄此,明⽂china就被转换成了密⽂FKLQD,具体⽤程序算法可归纳如下:a,⾸先将明⽂中的字母按照上表对应成相应的数字: 2 7 8 13 0b,再将上⾯的数字与密钥K=3相加: 5 10 11 16 3c,再对各个数字取模26运算,可得: 5 10 11 16 3d,最后将各数字转化为字母即可得密⽂ F K L Q D移位密码的解密移位密码的解密也⾮常简单,只要使⽤加密时⽤的密钥进⾏反向平移操作,刚来的例⼦只要将密⽂反向平移3位就⾏,可得到如下:F->cK->hL->iQ->nD->a具体程序的算法其实就是加密的反向操作,如下:a, 将密⽂转化成对应的字母 5 10 11 16 3b, 将各数字减去密钥K=3,得到如下数字 2 7 8 13 0c, 再对各个数字取模26运算,得: 2 7 8 13 0d, 最后将数字转化成字母得 c h i n a移位密码的暴⼒破解通过上⾯的例⼦可以知道,我们只要拿到的密钥K,就可以密⽂解密,那么有没有不⽤密钥就可以解密的呢,在移位密码中,密钥就是字母平移的位数,因为因为字母表⾥只有26个字母(0-25),所以加密的密钥⼀共就是0-25之间的26个数字,我们可以把26个数字全部当作密钥试⼀次,解密出来其中有⼀个明⽂肯定是对的。像这种将所有可能的密钥全部尝试⼀遍的,我们叫暴⼒破解(brute-force attack),这种⽅法本质是在所有的密钥中找出正确的那⼀个,因此⼜称为穷举搜索(exhaustive search)。可以将上⾯的例⼦通过暴⼒破解试⼀下,密钥从0开始,⼀直试到25,得到如下效果:FKLQD -> 第0次破解 -> fklqdFKLQD -> 第1次破解 -> ejkpcFKLQD -> 第2次破解 -> dijobFKLQD -> 第3次破解 -> chinaFKLQD -> 第4次破解 -> bghmzFKLQD -> 第5次破解 -> afglyFKLQD -> 第6次破解 -> zefkxFKLQD -> 第7次破解 -> ydejwFKLQD -> 第8次破解 -> xcdivFKLQD -> 第9次破解 -> wbchuFKLQD -> 第10次破解 -> vabgtFKLQD -> 第11次破解 -> uzafsFKLQD -> 第12次破解 -> tyzerFKLQD -> 第13次破解 -> sxydqFKLQD -> 第14次破解 -> rwxcpFKLQD -> 第15次破解 -> qvwboFKLQD -> 第16次破解 -> puvanFKLQD -> 第17次破解 -> otuzmFKLQD -> 第18次破解 -> nstylFKLQD -> 第19次破解 -> mrsxkFKLQD -> 第20次破解 -> lqrwjFKLQD -> 第21次破解 -> kpqviFKLQD -> 第22次破解 -> jopuhFKLQD -> 第23次破解 -> inotgFKLQD -> 第24次破解 -> hmnsfFKLQD -> 第25次破解 -> glmre脚本⽰例我们⽤脚本试⼀下上⾯所说的各种⽅法,脚本代码在这⾥#明⽂是 I am peter, I love china, 密钥是6message = "iampeterxuilovechina"caesar = 6#调⽤encoder⽅法加密出密⽂cipher = r(message) => OGSVKZKXDAORUBKINOTG#调⽤decoder⽅法解密出明⽂r(cipher) => iampeterxuilovechina#暴⼒破解OGSVKZKXDAORUBKINOTG -> 第0次破解 -> ogsvkzkxdaorubkinotgOGSVKZKXDAORUBKINOTG -> 第1次破解 -> nfrujyjwcznqtajhmnsfOGSVKZKXDAORUBKINOTG -> 第2次破解 -> meqtixivbympsziglmreOGSVKZKXDAORUBKINOTG -> 第3次破解 -> ldpshwhuaxloryhfklqdOGSVKZKXDAORUBKINOTG -> 第4次破解 -> kcorgvgtzwknqxgejkpcOGSVKZKXDAORUBKINOTG -> 第5次破解 -> jbnqfufsyvjmpwfdijobOGSVKZKXDAORUBKINOTG -> 第6次破解 -> iampeterxuilovechinaOGSVKZKXDAORUBKINOTG -> 第7次破解 -> hzlodsdqwthknudbghmzOGSVKZKXDAORUBKINOTG -> 第8次破解 -> gykncrcpvsgjmtcafglyOGSVKZKXDAORUBKINOTG -> 第9次破解 -> fxjmbqbourfilsbzefkxOGSVKZKXDAORUBKINOTG -> 第10次破解 -> ewilapantqehkraydejwOGSVKZKXDAORUBKINOTG -> 第11次破解 -> dvhkzozmspdgjqzxcdivOGSVKZKXDAORUBKINOTG -> 第12次破解 -> cugjynylrocfipywbchuOGSVKZKXDAORUBKINOTG -> 第13次破解 -> btfixmxkqnbehoxvabgtOGSVKZKXDAORUBKINOTG -> 第14次破解 -> asehwlwjpmadgnwuzafsOGSVKZKXDAORUBKINOTG -> 第15次破解 -> zrdgvkviolzcfmvtyzerOGSVKZKXDAORUBKINOTG -> 第16次破解 -> yqcfujuhnkybelusxydqOGSVKZKXDAORUBKINOTG -> 第17次破解 -> xpbetitgmjxadktrwxcpOGSVKZKXDAORUBKINOTG -> 第18次破解 -> woadshsfliwzcjsqvwboOGSVKZKXDAORUBKINOTG -> 第19次破解 -> vnzcrgrekhvybirpuvanOGSVKZKXDAORUBKINOTG -> 第20次破解 -> umybqfqdjguxahqotuzmOGSVKZKXDAORUBKINOTG -> 第21次破解 -> tlxapepciftwzgpnstylOGSVKZKXDAORUBKINOTG -> 第22次破解 -> skwzodobhesvyfomrsxkOGSVKZKXDAORUBKINOTG -> 第23次破解 -> rjvyncnagdruxenlqrwjOGSVKZKXDAORUBKINOTG -> 第24次破解 -> qiuxmbmzfcqtwdmkpqviOGSVKZKXDAORUBKINOTG -> 第25次破解 -> phtwlalyebpsvcljopuh可以知道,移位密码其实是很弱的,我们可以很容易将他破解出来,但是在古代那会还是挺有⽤的。参考资料【密码学原理与实践(第三版)】【图解密码技术】