精华内容
下载资源
问答
  • CTF-Affine放射密码

    2021-04-19 18:21:50
    仿射密码 二、解题思路 题目提示是反射密码,这里还提供了“a”与“b”的值可以确定是仿射密码加密。 三、解题过程 方式一: 直接利用网站进行解密输出密文,a与b 的值解出flag。 方式二: 自己使用python代码写...

    一、题目

    仿射密码

    在这里插入图片描述
    在这里插入图片描述

    二、解题思路

    题目提示是反射密码,这里还提供了“a”与“b”的值可以确定是仿射密码加密。

    三、解题过程

    方式一:

    直接利用网站进行解密输出密文,a与b 的值解出flag。
    在这里插入图片描述

    方式二:

    自己使用python代码写解密
    我这里也是搬运别人的代码

    def get(a, b):
        if b == 0:
            return 1, 0
        else:
            k = a // b
            remainder = a % b
            x1, y1 = get(b, remainder)
            x, y = y1, x1 - k * y1
        return x, y
    
    
    s = input("请输入解密字符:").upper()
    a = int(input("请输入a:"))
    b = int(input("请输入b:"))
    
    # 求a关于26的乘法逆元
    x, y = get(a, 26)
    a1 = x % 26
    
    l = len(s)
    for i in range(l):
        cipher = a1 * (ord(s[i]) - 65 - b) % 26
        res = chr(cipher + 65)
        print(res, end='')
    

    在这里插入图片描述
    这里解出的flag是大写的,之前解出来提交发生错误,原来是因为大小写的原因,这里是要注意的

    有问题或者说的不好地方可以私信告诉我,感谢大家的观看!

    展开全文
  • 26个字母加上空格,逗号,句号的字符串的解密,用c++编写
  • 仿射密码是一种替换密码。它是一个字母对一个字母的。它的加密函数是 ,其中a和m互质,m是字母的数目。解码函数是 ,其中 是a在 群的乘法逆元。 仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程...
  • 仿射密码解密工具

    2019-03-06 11:06:56
    是仿射密码的解密工具,可以解仿射密码
  • 主要介绍了Python实现仿射密码的思路详解,本文通过实例代码给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要为大家详细介绍了java实现仿射密码加密解密的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • 实验内容 1)用C\C++语言实现单表仿射(Affine)加/解密算法; 2)用C\C++语言实现统计26个英文字母出现频率的程序; 3)利用单表仿射加/解密程序对一段较长的英文文章进行加密,再对明文和密文中字母出现的频率...
  • 仿射密码解密

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

    2014-07-26 17:26:13
    仿射密码是替换密码的另一个特例,可以看做是移位密码和乘数密码的结合。其加密变换如下: E(m)=(k1*m+k2) mod q;(其中k1,k2为密钥,且0,k2。k1和q是互素的)。 现已知一经过仿射加密的密文和密钥,请破译...


    仿射密码

    时间限制: 1000 ms  |  内存限制: 65535 KB
    难度: 1
    描述

    仿射密码是替换密码的另一个特例,可以看做是移位密码和乘数密码的结合。其加密变换如下:

    E(m)=(k1*m+k2) mod q;(其中k1,k2为密钥,且0<k1,k2<q。k1和q是互素的)。

    现已知一经过仿射加密的密文和密钥,请破译出它的明文。

    输入
    输入包含不超过1000组数据;
    每组数据包含一个由大写字母组成的字符串和两个正整数k1,k2,字符串长度不超过50,0<k1,k2<q。
    输出
    每组输出占一行,输出对应的明文。
    样例输入
    ILOVEYOU 3 2
    
    样例输出
    CDEPSQEG

    #include<iostream>
    #include<cstring>
    #include<cstdio>
    using namespace std;
    
    int main()
    {
        int n,m,i,j,k;
        char s[55];
        while(cin>>s)
        {
            cin>>n>>m;
            switch(n)
            {
                case 1: j=1;    break;
                case 3: j=9;    break;
                case 5: j=21;   break;
                case 7: j=15;   break;
                case 9: j=3;    break;
                case 11:j=19;   break;
                case 15:j=7;    break;
                case 17:j=23;   break;
                case 19:j=11;   break;
                case 21:j=5;    break;
                case 23:j=17;   break;
                case 25:j=25;   break;
            }
            for(i=0;i<strlen(s);i++)
            {
                k=((-m)*j)%26;
                if(k<0) k+=26;
                s[i]=((s[i]-'A')*j+k)%26+'A';
                printf("%c",s[i]);
            }
            printf("\n");
        }
    }
    


    展开全文
  • 仿射密码

    2021-04-21 22:43:39
    通过编程实现代换密码算法——仿射密码和简单置换密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。 实验内容: 根据仿射密码的实现原理,实现利用仿射密码进行加密和解密的程序。 (1)设计加密程序:...

    仿射密码定义原理:
      仿射密码为单表加密的一种,字母系统中所有字母都借一简单数学方程加密,对应至数值,或转回字母。 其仍有所有替代密码之弱处。所有字母皆借由方程加密,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)
    

    运行结果:

    在这里插入图片描述

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

    展开全文
  • 密码学—仿射密码实验报告

    千次阅读 2020-04-05 19:22:10
    古典密码算法实验报告 姓名:空の城 学号:你猜 ...仿射密码的基本思想:加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是: C=Ek(m)=(k1m+k2)mod nC=Ek(m)=(k1m+k2)mod n M=Dk(c)=k1(...

    古典密码算法实验报告

    姓名:空の城 学号:你猜 专业班级:网络安全专业

    一、实验目的

    通过编程实现替代密码算法——仿射密码算法,加深对古典密码体制的了解,为深入学习密码学奠定基础。

    二、实验原理

    仿射密码的基本思想:加法密码和乘法密码结合就构成仿射密码,仿射密码的加密和解密算法是:

    C=Ek(m)=(k1m+k2)mod nC=Ek(m)=(k1m+k2)mod n

    M=Dk(c)=k1(c-k2)mod nM=Dk(c)=k1(c-k2)mod n o仿射密码具有可逆性的条件是gcd(k,n)=1。当k1=1时,仿射密码变为加法密码,

    当k2=0时,仿射密码变为乘法密码。o仿射密码中的密钥空间的大小为np(n),当n为26字母,p(n)=12,因此仿射密码的密钥空间为12×26=312。

    三、实验内容

    本实验以仿射密码算法为对象,利用C++语言实现利用仿射密码进行加密和解密的程序。

    1)算法流程

    将加密前的密文存入char类型的数组,char类型的数组ex存入加密后的值,a,b依次存放k1,k2,利用ascii码,依次处理数据进行加密,输出用+‘a’的ascii码后转换为字符即可,用递归的欧吉利函数求得a的逆元,用解密算法y[i] = (k1的逆元int(加密过的一个元素) –k1的逆元 k2) % 26;

    2)程序代码(算法实现)

    #include <iostream>
    
    #include<math.h>
    
    #include<string.h>
    
    using namespace std;
    
    
    
    
    //模的取逆 欧几里的递归实现
    
    int dx, y, q;
    
    void extend_Eulid(int aa, int bb)
    
    {
    
    if (bb == 0) {
    
    dx = 1;y = 0;q = aa;
    
    }
    
    else {
    
    extend_Eulid(bb, aa%bb);
    
    int temp = dx;
    
    dx = y;
    
    y = temp - aa / bb*y;
    
    }
    
    }
    
    
    
    
    int main()
    
    {
    
    int a, b, YN, i, l;
    
    char c[100];
    
    int x[100], y[100];
    
    char ex[100];
    
    first:
    
    system("cls");
    
    cout << "依次输入k =( a, b )的a, b值,需要满足gcd(a,26) = 1 " << endl;
    
    cin >> a >> b;
    
    cout << "加密函数为 ex = " << a << "*x + " << b << endl;
    
    cout << endl <<"输入你要加密的明文" << endl;
    
    cin >> c;//明文
    
    l = strlen(c);//获取长度
    
    //encode 依次处理
    
    for (i = 0; i < l; i++)
    
    {
    
    //转化为数字
    
    x[i] = c[i] - 'a';
    
    ex[i] = (a * x[i] + b) % 26;
    
    }
    
    cout << "加密后的字母为:";
    
    //转化为字符
    
    for (i = 0; i < l; i++)
    
    {
    
    cout << char(ex[i] + 'a');
    
    }
    
    cout << endl;
    
    
    
    
    //decode  解密
    
    extend_Eulid(a, 26);//调用取逆
    
    dx = (dx+26) % 26;
    
    cout << "解密后的字母为:";
    
    for (i = 0; i < l; i++)
    
    {
    
    y[i] = (dx*int(ex[i]) - dx*b) % 26;
    
    y[i] = (y[i] + 26) % 26;//避免附属的出现
    
    cout << char(y[i] + 'a');
    
    }
    
    cout<<endl;
    
    system("pause");
    
    cout<<"继续解密加密输入1   退出0" <<endl;
    
    int pd=0;
    
    cin>>pd;
    
    if(pd==1)
    
    goto first;
    
    else
    
    return 0;
    
    }
    

    四、运行结果

    数据说明、运行结果说明、运行截图

    a、输入文本:china is great 输入密钥k1、k2:5、3

    加密输出结果为:NMRQDRPHKXDU

    解密输出结果为:CHINA IS GREAT(大写)

    b、输入文本 wanghaoxuan输入密钥k1=7 k2=3

    输出:加密后的字母为:bdqtadxindq

    解密后的字母为:wanghaoxuan

    运行截图

    五、实验总结

    在解密函数最后的时候,忽略了在求y[i] = (k1的逆元int(加密过的一个元素) –k1的逆元 k2) % 26;的时候出现负数的情况,通过查阅资料用y[i] = (y[i] + 26) % 26;即可避免负数的出现。开始用C语言写但在字符的读入和处理空格的时候有很多的麻烦getchar等函数,所以最后使用的是c++ 的cin的格式进行处理。

    我的个人博客 空の城.

    展开全文
  • 古典密码之仿射密码

    千次阅读 2019-01-11 20:20:15
    1.仿射密码结合了移位密码和乘数密码的特点,是移位密码和乘数密码的组合。 2.仿射密码的加密算法就是一个线性变化,即对明文字符x,对应的密文字符为y=ax+b(mod26)其中,a, b属于Z26且gcd(a,b)=1
  • 仿射密码 加密 解密

    2012-04-14 10:20:04
    仿射密码 加密 解密 java 图形界面
  • 密码学仿射密码

    2020-11-30 21:32:08
    密码学仿射密码 1、密钥空间的计算 1) 密钥空间的定义: K= {(a,b}∈Zm * Zm : gcd(a,m)=1} gcd(a,m)=1:a与m最大公约数是1,两个数互素 在Douglas R. Stinson 的《密码学原理与实践》(第3版)中给出了如上定义,...
  • 仿射密码C语言程序代码

    热门讨论 2011-04-08 15:47:40
    用C语言设计的仿射密码,在VC6.0上可以运行,效果不错
  • 仿射密码算法

    2012-03-21 14:48:18
    C语言 仿射密码.
  • CTF-密码学-仿射密码

    2021-04-19 17:46:57
    题目: Affine 实训描述:hwwfutfjstgbzxxq ,y=3x+7,flag 格式是 SeBaFi{} 读题:翻译过来的意思是仿射...审题:马上想到因该通过仿射密码解决问题 解题:搜索仿射密码在线工具 https://wtool.com.cn/affine.html ...
  • nyoj-770-放射密码

    2014-02-20 22:01:35
    #include #include char a[52]; int main() { int k1,k2; while(scanf("%s%d%d",a,&k1,&k2)!=EOF) { int i,j,n; n=strlen(a); for(i=0;i { for(j=0;;j++) { if((j*k1+k2)%26==a[i]-65) ...printf("%c
  • 仿射密码加解密(python实现)

    千次阅读 2020-05-24 16:19:24
    仿射密码是一种替换密码。它是利用加密函数一个字母对一个字母的加密。 加密函数是E(x)= (ax + b) (mod m),其中,a和m互质,m是字符集的大小。 (例如,26即是以26个字母作为编码,当m是26时,a必须是1,3,5,7,9...
  • C语言 仿射密码加解密 C语言实现代码。。。 #include<stdio.h> #include<string.h> void jiami(int m,int k,int kk,int d[],char ss[],char s[]){ //加密函数 for(int i=0;i<m;i++){ if(s[i]>...
  • 仿射密码解密(Affine Cipher)

    万次阅读 多人点赞 2018-11-05 23:16:07
    仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。 A B C D E F G H I J K L M N O P Q R...
  • 加密解密工具 之 仿射密码

    千次阅读 2020-05-24 10:51:29
    仿射密码(Affine Cipher)为单表加密的一种,字母系统中所有字母都藉一简单数学方程加密,对应至数值,或转回字母。 仿射密码是一种替换密码。它是一个字母对一个字母的。 因为仿射密码仍为单字母表密码, 其依旧...
  • 仿射密码的加密解密

    千次阅读 2018-12-19 22:45:24
    仿射密码的加解密代码 因为加密的为英文字母以及数字,所以模数选择26+10=36. 再选一个k1为一个与36互素的数字. 再任意选一个k2 求除k1在模36下的逆元k3.(欧几里得除法,代码也可实现,这里没写,直接给出) 加密为: c=...
  • 仿射密码解密脚本

    2020-06-01 18:11:53
    格式e(x)=ax+b(mod26) def get(a, b): if b == 0: return 1, 0 else: k = a //b remainder = a % b x1, y1 = get(b, remainder) x, y =y1, x1 - k * y1 return x, y ...s = input("请输入解密字符:").upper() ...
  • 加法密码和乘法密码结合就构成仿射密码,仿射密码的加密算法是: C= Ek(m)=(k1*m+k2) mod n 在这里我们规定n=26;其中明文信息为26个小写字母(az)集合,密文为26个大写字母(AZ)集合,然后在对大写字母作进一步操作...
  • 密码学基础--仿射密码

    千次阅读 2019-10-06 17:33:51
    在仿射密码中,加密函数定义为: e(x)=(ax+b)mod26 a,bZ。因为这样的函数被称为仿射函数,所以这样的密码体制也称为仿射密码(可以看出,当a=1时,其对应的正是移位密码)。 为了能对密文进行解密,必须保证...
  • 仿射密码解密 频率法

    2020-12-10 17:50:16
    密码作业 仿射密码解密 文本控制输入输出 中间代码有参考 密文 ...
  • 密码学期末计算题复习

    千次阅读 多人点赞 2021-01-13 15:43:56
    古典密码移位密码:代换密码欧拉函数:乘法逆元用拓展欧几里得求解详细过程:群Zm内所有元素关于模26的乘法逆元如下:仿射密码:希尔密码:定义在Zm上的矩阵求逆 :2.对称密码体制AES加密的工作模式3.非对称密码体制...

空空如也

空空如也

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

放射密码