密码学
文章平均质量分 60
Mitch311
我与春风皆过客, 你携秋水揽星河。
展开
-
【密码学】RSA的攻与防_4.0
在明文加密前先对明文进行随机填充,让密文随机化,推荐最优非对称加密填充,抵抗选择密文攻击。密钥交换需要数字证书验证身份,抵抗中间人攻击。RSA签名中,对消息的哈希值进行签名,抵抗RSA伪造签名。不定时更新产生新的模N,抵抗共模攻击。原创 2022-10-26 15:17:28 · 1885 阅读 · 1 评论 -
【密码学】RSA的攻与防_3.0
利用RSA的性质:E(PU,M1)*E(PU,M2)=E(PU,[M1M2])PU是公钥,M是待加密内容。即利用CCA攻击,可以用如下方式解密:假定一攻击者截获密文C =M^emod n,此时无法解密M,但可以执行如下计算:(1)计算(2)将X作为选择明文提交,并收到Y =X^dmodn观察下面的等式:M^e*因此,所以可得到消息M1.2 防御措施解决办法是在明文加密前先对明文进行随机填充,让密文随机化,原创 2022-10-24 16:39:31 · 1753 阅读 · 0 评论 -
【密码学】RSA的攻与防_2.0
考虑一种简化场景,假设A需要发送同一条消息m给B、C和D。三位接收者的公钥分别为(N1,3)、(N2,3)和(N3,3),即公钥指数都为3,公钥模数各不相同。消息不填充,A直接用其他三人的公钥加密并发出三段密文c1,c2,c3:c1=𝑚3modN1, c2=𝑚3modN2,c3=𝑚3modN3这时E偷偷记下三段密文,标记M=m3,如果E可以恢复M,开三次方根自然就得到明文m。这里求解M。原创 2022-10-24 16:25:56 · 2152 阅读 · 0 评论 -
【密码学】RSA的攻与防_1.0
本文阐述了RSA密码体制存在的一些小问题,并且给出了相应的防御措施。原创 2022-10-16 16:29:38 · 3259 阅读 · 2 评论 -
【Python】cryptography和pycryptodome库使用
(1)使用cryptography模块,编写完整的AES-CBC加解密函数,函数接口为:def encrypt_CBC(key, plaintext, iv)、def decrypt_CBC(key, ciphertext, iv);(2)使用pycryptodome模块,编写程序,实现RSA-OAEP加解密;知识补充????(1)AES是高级加密标准(Advanced Encryption Standard)的缩写,AES是最常见的对称加密算法。对称加密算法也就是加原创 2021-12-24 21:28:46 · 7912 阅读 · 9 评论 -
【Python】RSA算法实现的原理和过程(附源码)
编写求最大公因子的函数;编写求模逆的扩展欧几里得算法函数;编写rabin-miller素性检测算法函数;编写生成大素数的算法函数;编写生成RSA公私钥对的函数;编写RSA加密和解密函数;原创 2021-12-15 14:09:13 · 4680 阅读 · 0 评论 -
【密码学】破解RSA密码(Python代码实现)
题目描述已知有人写了如下的代码,并将生成的(n,e,c)以及(n2,e2,c2,(p2+1)*(q2+1))输出。from Crypto.Util.number import *def ef(): p=getPrime(512) q=getPrime(512) flag=open("flag","rb").read() m=bytes_to_long(flag) e=65537 n=p*q c=pow(m,e,n) print(n,...原创 2021-12-26 18:40:06 · 12083 阅读 · 7 评论 -
【密码学】破解维吉尼亚密码(C++代码实现)
问题简述维吉尼亚密码是使用一系列凯撒密码组成密码字母表的加密算法,属于多表密码的一种简单形式。在一个凯撒密码中,字母表中的每一字母都会作一定的偏移,例如偏移量为3时,A就转换为了D、B转换为了E……而维吉尼亚密码则是由一些偏移量不同的凯撒密码组成。为了生成密码,需要使用表格法。这一表格(如图所示)包括了26行字母表,每一行都由前一行向左偏移一位得到。具体使用哪一行字母表进行编译是基于密钥进行的,在过程中会不断地变换。例如,假设明文为:ATTACKATDAWN选择某一关键词并重复而原创 2022-04-01 15:03:41 · 10404 阅读 · 7 评论 -
【密码学】Miller-Rabin素性检测(C++代码实现)
#include <NTL/ZZ.h>#include<iostream>using namespace std;using namespace NTL;//n为素数候选者,x为随机数long witness(const ZZ& n, const ZZ& x) { ZZ d, y, z; long j, s; if (x == 0) return 0; //计算s,d,使得n-1 = 2^s * d...原创 2021-10-04 13:06:40 · 2046 阅读 · 2 评论 -
【密码学】凯撒密码解密(C++代码实现)
#include <NTL/ZZ.h>#include<iostream>using namespace std;using namespace NTL;int main(){string password ="KYVBVPZJJVMVEKVVEKYVUVTFDGIVJJZFEGRJJNFIUZJKYVTLSVFWKYVBVP"; for (int key = 1; key < 26; key++) { cout << "key...原创 2021-10-04 13:09:48 · 1812 阅读 · 0 评论 -
【密码学】费马小定理素性检测(C++代码实现)
#include <NTL/ZZ.h>#include<iostream>using namespace std;using namespace NTL;long PrimeTest(const ZZ& n, long t){ if (n <= 1) return 0; //用2000以内的素数对n进行初筛 PrimeSeq s; // 生成一个素数数列 long p; p = s.next(); //...原创 2021-10-04 13:19:12 · 1498 阅读 · 0 评论 -
【密码学】Pollard‘s p-1素数分解算法
在这里我们选取的a是2,这样保证了与p互素。另外补充一点,这个算法存在失败的可能,也就是说有可能找不到N的因子,但这并不妨碍N是个合数的事实。只要B!取值合理,可以在多项式时间计算出结果。但是B!必须满足"大于p − 1 p-1p−1的所有因子",如果p − 1的因子很大,选择小的B会造成算法求解失败,选择足够大的B才会增加算法成功的概率,但那样的话算法的复杂度不比试除法好,所以说算法的关键是选取合适的B。C++代码:#include <NTL/ZZ.h>...原创 2021-10-14 20:28:36 · 2611 阅读 · 3 评论