精华内容
下载资源
问答
  • 仿射密码是一种替换密码。它是一个字母对一个字母的。它的加密函数是 ,其中a和m互质,m是字母的数目。解码函数是 ,其中 是a在 群的乘法逆元。 仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程...
  • Python实现仿射密码

    2020-12-21 07:40:55
    仿射密码思路: 1、加解密公式: 2、构造对应字典: 3、代码实现 构造字典,建立映射关系: # 构造字典,'A' --> 0 ... def char_2_num(x): list_s = [] list_num = [] for i in range(26): c = chr(i + 65)...
  • 主要为大家详细介绍了java实现仿射密码加密解密的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 主要介绍了基于Python解密仿射密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 主要介绍了Python实现仿射密码的思路详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 基于C语言,实现仿射密码算法,随机生成密钥a、b,加密和解密程序对任意满足条件的a、b都能够进行处理。
  • 仿射密码解密工具

    2019-03-06 11:06:56
    仿射密码的解密工具,可以解仿射密码
  • MATLAB实现仿射密码

    2017-12-02 17:07:15
    用matlab来实现仿射密码,主要是现代密码学课上的实验。
  • 仿射密码C++实现

    2018-09-20 16:27:27
    仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程加密,对应至数值,或转回字母
  • 26个字母加上空格,逗号,句号的字符串的解密,用c++编写
  • 仿射密码的攻击

    2019-04-23 20:10:41
    仿射密码的算法思想主要是两部分,加密变换c=ek(m)=am+b mod 28,脱密变换m=dk(c)=a-1(c-b)mod 28,(c,m分别代表密文和明文所对应的数字)a,b ∈Z28 且a与28要互素,否则a没有逆元则求不出明文数字对应的密文数字。
  • 用C写的仿射变换加密解密程序,程序过程很简单,不足之处,欢迎提出
  • 仿射密码

    2021-04-21 22:43:39
    根据仿射密码的实现原理,实现利用仿射密码进行加密和解密的程序。 (1)设计加密程序:能够根据用户输入明文的内容产生加密的密文并输出 (2)设计解密程序:能够对输入的密文内容破解并输出得到其对应的明文。 # -*- ...

    仿射密码定义原理:
      仿射密码为单表加密的一种,字母系统中所有字母都借一简单数学方程加密,对应至数值,或转回字母。 其仍有所有替代密码之弱处。所有字母皆借由方程加密,b为移动大小。
      在仿射加密中,大小为m之字母系统首先对应至0…m-1范围内之数值, 接着使用模数算数来将原文件中之字母转换为对应加密文件中的数字。 单一字母的加密函数为:
      在这里插入图片描述
    取余m为字母系统大小且a和b为密码关键值。a之值必须使得a与m互质。
    解密方程为
      在这里插入图片描述
    举例说明:

    代换密码算法的原理是使用替代法进行加密,就是将明文中的字符用其它字符替代后形成密文。例如,明文字母a、b、c、d,用D、E、F、G做对应替换后形成密文。
    代换密码包括多种类型,如单表代换密码、多表代换密码等。下面介绍一种典型的单表代换密码——仿射密码。它的加密、解密过程可以表示为下面的函数:
    在这里插入图片描述
    仿射加密要求gcd(k1,26)=0,否则就褪化为 y=f(k)=k2(mod 26)。
    故密钥空间大小为: (k1,k2)=12x26=312
    例如:密钥k=(7,3),7-1(mod 26)=15
    加密函数: y=f(x)=7x+3(mod 26)
    解密函数: x=f^(-1)(y)=15(y-3)(mod 26)=15y-9(mod 26)
    设明文:China,首先转换为数字:2,7,8,13,0 在这里插入图片描述
    原始消息“China”得到恢复

    1、实验目的:
      通过编程实现代换密码算法——仿射密码和简单置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。
    2、实验内容:
      根据仿射密码的实现原理,实现利用仿射密码进行加密和解密的程序。
      (1)设计加密程序:能够根据用户输入明文的内容产生加密的密文并输出。
      (2)设计解密程序:能够对输入的密文内容破解并输出得到其对应的明文。

    # -*- coding: UTF-8 -*-
    import math
    """
        仿射密码加密解密模块
        @author WQ
        @time 2020/11/18
    """
    class Affine():
        """
            仿射密码
            Encrypt:加密方法
    		Decrypt:解密方法
    		letters:字母数字对应字典
        """
        def __init__(self):
            self.ciphertext=''  #加密后的密文
            self.plaintext=''   #解密后的明文
            self.reverse=0 #秘钥a的逆元
            self.list_keya=[3,5,7,9,11,15,17,19,21,23,25] #秘钥a可能取值
            self.letters = {
                    'a': 0, 'b': 1, 'c': 2, 'd': 3, 'e': 4, 'f': 5, 'g':6, 'h': 7,
                    'i': 8, 'j': 9, 'k': 10, 'l': 11, 'm': 12, 'n': 13, 'o': 14,
                    'p': 15, 'q': 16, 'r': 17, 's': 18, 't': 19, 'u': 20,
                    'v': 21, 'w': 22, 'x': 23, 'y': 24, 'z': 25}
    
        def gcd(self,a,b=26):
            if(a<b):
                return self.gcd(b,a)
            while(a%b!=0):
                temp = b
                b = a%b
                a = temp
            return b 
    
        def Encrypt(self,a=0,b=0,input=""):
            """
                对输入的字符串进行加密
                加密算法:c=Ea,b(m)=am+b(mod26) m是单个明文字母
                args={
                        a,b:秘钥
                        input:用于加密的明文
                }  
            """
            if(self.gcd(a)!=1):
                print("秘钥a错误,应与26互质,请重输!")
                exit(0)
            if(b>=26):
                print("秘钥b错误[0~26],请重输!")
                exit(0)
            input=input.lower()
            digitals=[]
            #加密转化成密文对应数字
            for i in input:
                for j in self.letters:
                    if(i==j):
                        d=(a*self.letters[i]+b)%26
                        digitals.append(d)
    
            #将对应数字转化对应密文字母
            for i in digitals:
                for j in self.letters:
                    if(i==self.letters[j]):
                        self.ciphertext=self.ciphertext+j  
    
        def Decrypt(self, a, b, input=""):
            """
                对输入的字符串进行解密
                解密算法:m=Da,b(m)=a(-1)(c-b)(mod26) c是单个密文字母
                args={
                        a(-1):秘钥a的逆元
                        b:秘钥
                        input:用于解密的秘文
                }  
            """
            if(self.gcd(a)!=1):
                print("秘钥a错误,应与26互质,请重输!")
                exit(0)
            if(b>=26):
                print("秘钥b错误[0~26],请重输!")
                exit(0)
            digitals=[]
            self.reverse=self.Inverse(a) #求逆元
            for i in input:#解密 密文转化成对应数字
                for j in self.letters:
                    if(i==j):
                        digitals.append(self.letters[j])
            #解密
            for i in digitals:
                t=(self.reverse*(i-b))%26
                for j in self.letters:
                    if(t==self.letters[j]):
                        self.plaintext=self.plaintext+j
    
        def BruteForce(self, input=''):
            #暴力破解仿射密码
            digitals=[]
            plaintext=''
            for i in input: #解密 密文转化成对应数字
                for j in self.letters:
                    if(i==j):
                        digitals.append(self.letters[j])
    
            for keya in self.list_keya:
                a=self.Inverse(keya)
                for keyb in range(0,26):
                    for i in digitals:
                        t=(keya*(i-keyb))%26
                        for j in self.letters:
                            if(t==self.letters[j]):
                                plaintext=plaintext+j
                                break
                    print(plaintext)
                    plaintext=''
    
        def Inverse(self, a,mod=26):
            #求秘钥a的逆元 欧几里得算法   
            x1,x2,x3 = 1,0,mod
            y1,y2,y3 = 0,1,a
            while(1):
                if(y3==0):
                    g=x3
                    break
                if(y3==1):
                    g=y3
                    break
                q=math.floor(x3/y3)#向下取整
                t1,t2,t3=x1-q*y1,x2-q*y2,x3-q*y3
                x1,x2,x3=y1,y2,y3
                y1,y2,y3=t1,t2,t3
            return y2   #逆元求得为y2,y3为gcd(a,26),最大公因数   
    
    if __name__ == "__main__":
        test=Affine()
        #a=test.Inverse(615647919867658945209035999713482421889581801898774401730949,691310408299283134015133178155232316338199895735303344369216)
        #print(a)
        inputs=input("请输入待加密明文:")
        a=int(input("请输入秘钥[a]:"))
        b=int(input("请输入秘钥[b]:"))
        test.Encrypt(a,b,inputs)
        test.Decrypt(a,b,test.ciphertext)
        s1 = "加密为:" + test.ciphertext
        s2 ="解密为:" + test.plaintext
        s3 = str(a) + "的逆元为: " + str(test.reverse)
        print(s1)
        print(s2)
        print(s3)
        #test.BruteForce(test.ciphertext)
    

    运行结果:

    在这里插入图片描述

    小结:仿射密码是利用简单的置换原理,实现比较容易;增加了一个爆破函数,利用穷举爆破仿射密码。

    展开全文
  • 仿射密码解密

    2015-05-12 14:25:06
    给出密文,统计得到出现频率最大的两个字母,确定密钥。
  • 仿射密码-Affine cipher

    2013-08-27 15:23:51
    仿射密码中的密钥空间的大小为nφ(n),当n为26字母,φ(n)=12,因此仿射密码的密钥空间为12×26 = 312。 此软件实现了仿射密码的加密和解密算法,通过网络传递加解密的数据。 如有问题请联系 QQ:369946814 HeiSir
  • c语言来具体实现单表仿射密码的加密解密过程,首先要求输入要处理的密文或明文,接着要求输入密钥a和b的值,接着输入0来表示对所给明文加密,输入1来表示对所给密文解密。然后程序根据调用函数gcd判断输入的密钥a与...
  • 仿射密码加密解密.zip

    2020-01-15 15:06:30
    加法密码和乘法密码结合就构成仿射密码仿射密码的加密算法是: C= Ek(m)=(k1*m+k2) mod n 一、仿射密码基本思路 加法密码和乘法密码结合就构成仿射密码仿射密码的加密算法是: C= Ek(m)=(k1*m+k2) mod n
  • 密码与隐藏技术1——仿射密码.zip
  • 基于用户界面的移位密码和仿射密码加解密,DES中是盒操作,进制转换
  • 上机实验报告 课程名称 数据加密及PKI技术 实验名称经典密码仿射密码 姓名 学号 班级 指导教师乔明秋 实验日期 实验成绩 一实验目的 本次上机实践所涉及并要求掌握的知识点 理解仿射密码的加密解密过程 二实验环境 ...
  • 1. Z26 上的仿射密码体制: (1) 应用 随机产生的密钥 (A 、 B ) 将一段英 文 ( 其长度应较长 ) 进行加、解密; (2) 针对 (1) ,统计其明文和密文中各字符出现的频率; (3) 针对 (1) ,计算明文和密文的重合指数...
  • 仿射密码 加密 解密

    2012-04-14 10:20:04
    仿射密码 加密 解密 java 图形界面
  • 仿射密码 使用Vue.js进行仿射密码加密! #NotFancyAppChallenge 检查以下应用程序: 如果您要检查此应用程序,请单击

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,570
精华内容 628
关键字:

仿射密码