精华内容
下载资源
问答
  • 仿射密码解密工具

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

    2015-05-12 14:25:06
    给出密文,统计得到出现频率最大的两个字母,确定密钥。
  • 主要介绍了基于Python解密仿射密码,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
  • 基于C语言,实现仿射密码算法,随机生成密钥a、b,加密和解密程序对任意满足条件的a、b都能够进行处理。
  • 用C写的仿射变换加密解密程序,程序过程很简单,不足之处,欢迎提出
  • 26个字母加上空格,逗号,句号的字符串的解密,用c++编写
  • 仿射密码是一种替换密码。它是一个字母对一个字母的。它的加密函数是 ,其中a和m互质,m是字母的数目。解码函数是 ,其中 是a在 群的乘法逆元。 仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程...
  • 仿射密码解密脚本

    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) ...s = input("请输入解密字符:").upper() a = int(input("请输入a:

    格式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()
    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='')
    

    在这里插入图片描述

    展开全文
  • 仿射密码解密 频率法

    2020-12-10 17:50:16
    密码作业 仿射密码解密 文本控制输入输出 中间代码有参考 密文 ...

    密码作业
    仿射密码解密 频率法

    文本控制输入输出
    中间代码有参考

    从密文中获得字母频次统计表。
    C→E,K→T 4a+b=2,19a+b=10 得到的解与可mod26所有的合法值比较
    s[14] = { 1,1,3,9,5,21,7,15,11,19,17,23,25,25 },在s中为则合法解,不在则为不合法解。
    求出a逆,得到解密方程。
    解密出明文看是否有意义。
    有意义则解密结束,否则仍需继续遍历字母频次统计表以找到合法的解密方程。

    密文

    AOPCGUDEYKROIFKGBEFMCPIYCRARDEPBAQUFEPGHKJPKDDCJGKPJIEVCGEBEBAYCFAMCXCERIAREHAFFERJGHCRAOKBBKYARRCEDKFAIGHCPCDCKDFCBKKMEFEMCGKXCOKRQKYYEBKYCERBHCCRJKVEIBKPSAQKUFJRKBIDCEMEGHKFCICRBCRQCARQKYDERSERJGEIQKRIAJCPCJRKBBKKXPAOHB
    明文
    Igrewupaicularwhlikebeanneapolisgoncommaldnotspeyandwascmongslowodroppedsinahillwherepeotomeanthakawholeonsideretalkersmwordsafeandwhenipletookaeendofassentencednottoobeninpartwatatimegottominlakewobetoryicouincompanright
    代码

    #include <iostream>
    #include <fstream>
    #include <cstdio>
    #include <cstring>
    #include <string>
    #include <set>
    #include <map>
    #include <cstdio>
    #include <cstdlib>      
    #include <vector>       
    #include <algorithm> 
    using namespace std;
    
    typedef pair<char, int> PAIR;
    bool cmp_by_value(const PAIR& lhs, const PAIR& rhs) {
    	return lhs.second > rhs.second;
    }
    struct CmpByValue {
    	bool operator()(const PAIR& lhs, const PAIR& rhs) {
    		return lhs.second > rhs.second;
    	}
    };
    
    int s[14] = { 1,1,3,9,5,21,7,15,11,19,17,23,25,25 };
    
    int search(int s[], int y, int x) /*被调用的函数search()*/
    {
    	int i, f = -1;
    	for (i = 0; i < 14; i++)
    	{
    		if (x == s[i])//查找到所需的元素,跳出循环
    		{
    			f = i + 1;
    			break;
    		}
    	}
    	return(f);
    }
    
    
    int main() {
    
    	ifstream in("D:/test/1/in.txt");
    	ofstream out("D:/test/1/output.txt");
    	string filename;
    	string line;
    
    	if (in) // 有该文件
    	{
    		while (getline(in, line)) // line中不包括每行的换行符
    		{
    			map<char, int> m;
    			for (auto i : line)
    			{
    				m[i]++;
    			}
    			for (auto& i : m)
    			{
    				cout << i.first << ' ' << i.second << endl;
    			}
    
    			vector<PAIR> m_vec(m.begin(), m.end());
    			sort(m_vec.begin(), m_vec.end(), CmpByValue());
    
    			int j;
    			j = m_vec.size();
    
    			char* p_str = new char[j];
    			for (int i = 0; i != m_vec.size(); ++i)
    			{
    				cout << m_vec[i].first << " " << m_vec[i].second << endl;
    			}
    
    			for (int i = 0; i != m_vec.size(); ++i)
    			{
    				p_str[i] = m_vec[i].first;
    				//cout << " p_str  " << p_str[i] << endl;
    
    			}
    
    			int a, b, c, d, e, f;
    			a = 4;
    			b = 1;
    			c = m_vec[0].first - 65;
    			cout << p_str[0] << endl;
    			d = 19;
    			e = 1;
    			//f = m_vec[1].first - 65;
    			//方程不变量赋值
    			int x = 0; 
    			int y = 0;
    			int pos=-1;
    			for (int n = 1; n < j; n++) {
    
    				cout << p_str[n] << endl;
    				f = m_vec[n].first - 65;
    				cout << "m_vec[n].firs  " << m_vec[n].first<< f << endl;
    				//方程找t的匹配字符从第二频次开始 n=1开始 ,m_vec[1].first
    				cout << "第 n: " << n << " 频次 " << endl;
    				//解x和y
    				
    				int p = 1;
    				do {
    					x = (f - c + 26 * p);
    					
    					p++;
    
    				} while (x % 15 != 0);
    				x = x / 15;
    				cout << " x: " << x << endl;
    
    				p = 0;
    				do {
    					//cout << "求y的 p: " << p << endl;
    					y = c - 4 * x + 26 * p;
    					p++;
    					
    				} while (y < 1);
    				cout << a << " |  " << b << " |  " << c << " |  " << d << " |  " << e << " |  " << f << endl;
    				cout << " x: " << x << endl;
    				cout << " y: " << y << endl;
    
    				pos = search(s, 10, x); /*调用函数search()完成顺序查找*/
    				cout << "pos数" << pos << endl;
    				if (pos < 0) /*输出要找的数的位置*/
    				{
    					cout << "没找到要找的数" << endl;
    			
    				}
    				else
    				{
    					cout << "您要找的数:   " << x << "  在数组中第 个元素处 " << pos << endl;
    					cout << "找到要的字母" << m_vec[n].first << endl;
    					break;
    				}
    
    			}
    			int ani = 0;
    			if (pos % 2 == 0)
    				{
    				ani = s[pos - 2];
    				}
    			else { ani = s[pos - 1]; }
    
    			cout << "您要找的a逆:   " << ani << endl;
    
    			cout << "解密函数x=" << ani << "(y- " << y << ")mod26 " << endl;
    
    				int sl;
    				sl = line.length();
    
    				char ch[500];
    				char re[500];
    				strcpy_s(ch, line.c_str());
    
    				for(int p=0;p<sl;p++)
    				{
    				
    					
    					re[p] =( ani * ((ch[p] - 65) - y)) % 26 + 97;
    					if ((ani * ((ch[p] - 65) - y)) < 0) {
    						re[p] = re[p] + 26;
    					}
    					cout << re[p];
    					out << re[p]; // 输入到2.txt中
    				}
    		}
    	}
    	else // 没有该文件
    	{
    		cout << "no such file" << endl;
    	}
    	in.close();
    	out.close();
    	system("pause");
    	return 0;
    }
    
    
    展开全文
  • 主要为大家详细介绍了java实现仿射密码加密解密的相关资料,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
  • MATLAB实现仿射密码

    2017-12-02 17:07:15
    用matlab来实现仿射密码,主要是现代密码学课上的实验。
  • 仿射密码解密(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...

    仿射密码是一种表单代换密码,字母表的每个字母相应的值使用一个简单的数学函数对应一个数值,再把对应数值转换成字母。

    ABCDEFGHIJKLMNOPQRSTUVWXYZ
    012345678910111213141516171819202122232425

    加密函数:E(x) = (ax + b) (mod m)其中 a与b互质,其中 a与m互质,m是编码系统中字母的个数(通常都是26)。

    解密函数:D(x) = a^{-1} (x - b) (mod m),其中 a^{-1} 是 a 在Z_{m}群的乘法逆元。

    下面就要介绍一下什么叫做乘法逆元:emmmmmm,好吧,我也不会,没看懂。

    这是网上关于使用欧几里得算法求解乘法逆元——Python的代码:(我是一个勤劳的搬运工,不要夸我^_^)

    #欧几里德算法求最大公约数
    def get_gcd(a, b):
    	k = a // b
    	remainder = a % b
    	while remainder != 0:
    		a = b 
    		b = remainder
    		k = a // b
    		remainder = a % b
    	return b
    	
    #改进欧几里得算法求线性方程的x与y
    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
    
    a = input('a:')
    b = input('b:')
    a, b = int(a), int(b)
     
    #将初始b的绝对值进行保存
    if b < 0:
    	m = abs(b)
    else:
    	m = b
    flag = get_gcd(a, b)
     
    #判断最大公约数是否为1,若不是则没有逆元
    if flag == 1:	
    	x, y = get_(a, b)	
    	x0 = x % m #对于Python '%'就是求模运算,因此不需要'+m'
    	print("所求的逆元:",x0) #x0就是所求的逆元
    else:
    	print("Do not have!")
    

    比如求5关于模26的乘法逆元

     

    下面举个例子,求解仿射密码(搬运工上线...):

    我们以 E(x)=(5x+8) mod 26函数为例子进行介绍,加密字符串为 AFFINECIPHER,这里我们直接采用字母表26个字母作为编码系统

    密文就是IHHWVCSWFRCP。

    解密过程:

    1. 先求解5关于模26的乘法逆元,为21
    2. 解密函数就是D(x) = 21(x - 8) mod 26 
    3. 解密如下

     下面是关于求仿射密码的python3脚本(自己写的,有错请指正):

    #仿射密码解密
    #改进欧几里得算法求线性方程的x与y
    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='')
    

    这是我第一次写博客,有哪里不对的欢迎指正!多谢。

    展开全文
  • 仿射密码 加密 解密

    2012-04-14 10:20:04
    仿射密码 加密 解密 java 图形界面
  • 仿射密码C++实现

    2018-09-20 16:27:27
    仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程加密,对应至数值,或转回字母
  • 仿射密码是一种古典移位密码,其算法设计师用到的数学基础是模运算和同余方程。它是一个字母对一个字母的加密密码。定义明文空间P=Z26 P={\rm Z}_{26} P=Z26​ ,密文空间C=Z26 C={\rm Z}_{26} C=Z26​ ,秘钥空间为...

    仿射密码是一种古典移位密码,其算法设计时用到的数学基础是模运算和同余方程。它是一个字母对一个字母的加密密码。定义明文空间 P = Z 26 P={\rm Z}_{26} P=Z26 ,密文空间 C = Z 26 C={\rm Z}_{26} C=Z26 ,秘钥空间为 K = { ( a , b ) ∈ Z 26 ⋅ Z 26 : g c d ( a , 26 ) = 1 } K=\lbrace (a,b)\in {\rm Z}_{26} \cdot {\rm Z}_{26}:gcd(a,26)=1 \rbrace K={(a,b)Z26Z26:gcd(a,26)=1} 对于 x ∈ P , y ∈ C , k = ( a , b ) ∈ K x\in P, y\in C,k=(a,b)\in K xP,yC,k=(a,b)K 定义加密函数 e k ( x ) = a x + b m o d      26 {\rm e}_k(x)=ax+b\mod \ 26 ek(x)=ax+bmod 26
    ,定义解密函数 d k ( x ) = a − 1 ( y − b ) m o d      26 ) {\rm d}_k(x)=a^{-1}(y-b)\mod \ 26) dk(x)=a1(yb)mod 26)
    ,其中是a在群的乘法逆元(求a在群的乘法逆元)。当a=1时,仿射密码,弱化为凯撒密码。

    1.加密过程: text为要加密的明文,password为加密后的密文

    //加密
    char* encode(char* text,int addkey,int mulkey)
    {
        char* password=NULL;//空指针
        //开辟空间
        password=(char*)malloc(10*sizeof(char));
        for(int i=0;i<strlen(text);i++)
        {
            int code=text[i]-'a';
            password[i]=(code*mulkey+addkey)%26+'a';
        }
        return password;
    }
    

    2.求逆过程: 拓展欧几里得算法

    //求逆  b%m的逆
    int extendedeuclid(int m,int b)
    {
        int a1,a2,a3;
        int b1,b2,b3;
        int t1,t2,t3;
        a1=1;a2=0;a3=m;
        b1=0;b2=1;b3=b;
        while(1)
        {
            if(b3==0) return 0;
            if(b3==1)
            {
                if(b2<0) b2=m+b2;
                return b2;
            }
            int q=a3/b3;
            t1=a1-q*b1;t2=a2-q*b2;t3=a3-q*b3;
            a1=b1;a2=b2;a3=b3;
            b1=t1;b2=t2;b3=t3;
        }
        return 0;
    }
    

    3.解密过程: password是要解密的密文,text是得到的解密后的明文。

    //解密
    char* decode(char* password,int addkey,int mulkey)
    {
        char* text=NULL;
        text=(char*)malloc(10*sizeof(char));
        for(int i=0;i<strlen(password);i++)
        {
            int code=password[i]-'a';
            text[i]=( (code-addkey+ 26) * extendedeuclid(26,mulkey) )% 26 + 'a';
        }
        return text;
    }
    

    4.完整代码:

    #include <stdio.h>
    #include <stdlib.h>
    #include<string.h>
    
    //求逆  b%m的逆
    int extendedeuclid(int m,int b)
    {
        int a1,a2,a3;
        int b1,b2,b3;
        int t1,t2,t3;
        a1=1;a2=0;a3=m;
        b1=0;b2=1;b3=b;
        while(1)
        {
            if(b3==0) return 0;
            if(b3==1)
            {
                if(b2<0) b2=m+b2;
                return b2;
            }
            int q=a3/b3;
            t1=a1-q*b1;t2=a2-q*b2;t3=a3-q*b3;
            a1=b1;a2=b2;a3=b3;
            b1=t1;b2=t2;b3=t3;
        }
        return 0;
    }
    
    //加密
    char* encode(char* text,int addkey,int mulkey)
    {
        char* password=NULL;//空指针
        //开辟空间
        password=(char*)malloc(10*sizeof(char));
        for(int i=0;i<strlen(text);i++)
        {
            int code=text[i]-'a';
            password[i]=(code*mulkey+addkey)%26+'a';
        }
        return password;
    }
    
    //解密
    char* decode(char* password,int addkey,int mulkey)
    {
        char* text=NULL;
        text=(char*)malloc(10*sizeof(char));
        for(int i=0;i<strlen(password);i++)
        {
            int code=password[i]-'a';
            text[i]=( (code-addkey+ 26) * extendedeuclid(26,mulkey) )% 26 + 'a';
        }
        return text;
    }
    int main()
    {
        char text[200];
        printf("请输入明文:");
        scanf("%s",text);
        int k,b;
        printf("请输入k,b的值:");
    	scanf("%d%d",&k,&b);
        char *p=NULL;
        char *q=NULL;
        p=q=(char*)malloc(10*sizeof(char));
        p=encode(text,k,b);
        q=decode(p,k,b);
        printf("加密后的密文:%s\n",p);
        printf("解密后的明文:%s",q);
        free(p);free(q);
        return 0;
    }
    
    

    Cmd Markdown 公式指导手册
    复习了一下C语言的指针,学的时候感觉难,现在看还是难。

    展开全文
  • 仿射密码加密解密.zip

    2020-01-15 15:06:30
    加法密码和乘法密码结合就构成仿射密码仿射密码的加密算法是: C= Ek(m)=(k1*m+k2) mod n 一、仿射密码基本思路 加法密码和乘法密码结合就构成仿射密码仿射密码的加密算法是: C= Ek(m)=(k1*m+k2) mod n
  • 仿射密码破解——再别康桥

    千次阅读 2018-05-03 16:31:59
    这里有用仿射加密的一段诗歌密文(空格标点等没有加密),请尝试还原为明文并翻译为中文 Ptfxgj Jnno-afv wn Htzaixojv Tjtxg Af Yd Mqxzn Kvif bdxvwsf X wtlv zf svtkv Tp bdxvwsf tp X htzv qviv; Bdxvwsf X ...
  • 仿射密码的加密解密

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

    千次阅读 2018-03-26 17:06:59
    【题目】1) 实现仿射密码,具体要求: A.... 实现仿射密码破解程序(穷举),能对任意输入的密文进行解密 【实现代码】# -*- coding: utf-8 -*- """ Created on Sun Dec 17 20:03:09 2017 仿射密...
  • 仿射密码的硬破解

    千次阅读 2018-04-10 21:49:45
    破解仿射密码 目录 硬破解仿射密码 目录 仿射密码解密公式 需要破解的原文 破解的算法分析 C语言代码 python代码 效果展示 原文 仿射密码解密公式 需要破解的原文 Ptfxgj Jnno-afv wn ...
  • 仿射密码解析与实例

    千次阅读 2020-04-20 13:13:04
    仿射密码的加密函数是 E(x)=(ax+b)(modm) 其中 x表示明文按照某种编码得到的数字 a和 m互质 m是编码系统中字母的数目 解密函数是 D(x)=a−1(E(x)−b)(modm),D(x)和E(x)均代表数字,a,b是密钥,0≤a,b≤m. 其中gcd(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)...
  • 仿射密码解密及暴力破解c++实现

    千次阅读 2017-12-19 23:13:50
    仿射密码是属于单表置换密码,是加法密码和乘法密码的组合。 加密函数 e(x)= ax+b (mod 26),且要求gcd(a,26)=1 解密函数 x = a^(-1)(e(x)-b) 加解密代码如下: #include <iostream> #...
  • 虽然仿射密码是古典密码,现在已经不怎么用了,但是作为密码学的初学者,从古典密码开始学习起,还是有一定的指导作用。
  • 仿射密码加密解密实现

    千次阅读 2020-10-24 11:18:41
    加密和解密都是数学函数。对此并没有很多了解。只为一解答一道作业题目来了解这两个函数以及将函数转为代码。 先从百度基本了解一下这个加密函数 只靠通识的数学知识,理解 是有难度 首先是计算优先级的疑惑...
  • 仿射密码解密原理(C语言实现) 大家最好先学习一下欧几里得算法和欧几里得的扩展算法!! 下面的链接是欧几里得算法和欧几里得扩展算法的代码解释! 欧几里得算法和欧几里得扩展算法的代码解释 仿射密码解密...
  • 仿射密码的加密与解密

    千次阅读 2020-11-27 17:01:52
    仿射密码为单表加密的一种,字母系统中所有字母都藉一简单数学方程加密,对应至数值,或转回字母。它是一种替换密码,利用加密函数一个字母对一个字母的加密. 加密函数 加密函数是 E(x)= (ax + b) (mod m),其中,a...
  • 仿射密码 仿射密码是一种替换密码。它是一个字母对一个字母的。 它的加密函数是 Ek(x)=(k1x+k2) mod n(其中k1和n互质,n是...#仿射密码加密与解密实现算法 # -*- coding=utf-8 -*- #输入密钥 def accept(): k1,k2 =

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 974
精华内容 389
关键字:

仿射密码解密