NSSCTF 2nd
EzRSA题目 12345678910111213141516171819202122232425from Crypto.Util.number import *from secret import flagm = bytes_to_long(flag)assert m.bit_length()<200p = getPrime(512)q = getPrime(512)n = p*qe = 3c = pow(m, e, n)kbits = 103m = (m >> kbits) << kbitsMod = getPrime(1024)hint1 = (2021-2023*m) % Modhint2 = pow(2, 2023, Mod)print('n =',n)print('c =',c)print('hint1 =',hint1)print('hint2 =',hint2)'''n = 11538385523446622464376965...
流密码
流密码线性反馈移位寄存器拜访harry0597 LFSR 即线性反馈移位寄存器 作用:生成长伪随机序列,(二进制) 存储元件(触发器):可以存数据的就是 反馈路径:计算移位寄存器触发器的XOR和,并传递 度LFSR由若干时钟存储元件(触发器)组成,存储器元件个数就是LFSR的度 简单LFSR当m=3 假设初始状态为:S2=1, S1=0, S0=0 ;最右位的FF0往外输出 在每一个时间单位下,内部状态位向右移动一位 从左往右看 原先S2的值(1)给到 FF1 原先S1的值(0)给到 FF0 原先S0的值(0)和 原先S1的值(0)异或后(得到0)给到 FF2 原先S0的值(0)输出,LFSR得到数据 0 多次移位后,得到数据 Clk FF2 FF1 FF0=si 0 1 0 0 1 0 1 0 2 1 0 1 3 1 1 0 4 1 1 1 5 0 1 1 6 0 0 1 7 1 0 0 8 0 1 0 其中 Si 就是第i次输出的数据,i从0开始 而...
块密码题目概览
题目合集题目11234567891011121314151617181920212223242526272829from Crypto.Cipher import AESfrom Crypto.Util.Padding import pad, unpadfrom os import urandomfrom flag import flagdef cbc_encrypt(msg: bytes): msg = pad(msg, 16) msg = [msg[i:i+16] for i in range(0, len(msg), 16)] key = urandom(16) out = [] for block in msg: cipher = AES.new(key, AES.MODE_ECB) next = cipher.encrypt(block) out.append(next) key = next out = b"".join(out) return key...
初识块密码
基于比赛的AES搞得我一头雾水所以我转战块密码。 分组加密(Block cipher)分组加密包含一个成对算法:加密算法E,解密算法D(互为反函数)每个算法有两个输入:长度为n位的组,和长度为k位的密钥;两组输入均产生n位输出。将两个算法看作函数,K表示长度为 k的密钥(密钥长度),P表示长度为 n的分组,P也被表示为明文,C表示密文,则满足: $E_K(P)=C;E^{−1}_K(C)=P$ $ E_K(P):=E(K,P):{0,1}^k×{0,1}^n→{0,1}^n$ 每一个密钥实际上是选择了 n位输入排列的 (2n)!种组合中的一种大多数的分组密码在在加密算法中会重复使用某一函数进行多轮运算,典型的轮数在4-32次之间,每一轮的函数R使用不同的子密钥 Ki,由原密钥生成,作为输入: $M_i=R_{Ki}(M_{i−1})$ 其中 M0是最初的明文,Mi是第 i轮加密后的密文 AES(Advanced Encryption Standard)一些问答题目:1、输入块和输出块之间必须一一对应”的数学术语叫做双射(Bijection)...
记录一些栓发
连分数逼近若 $∣x−p/q∣<1/(2q2)$,则p/q 必为x 的某阶渐近分数。因此k/d 一定会出现在 e/N 的连分数展开序列中任何有理数都可以写成这种嵌套形式: $$ \begin{aligned} e \cdot d &= k \varphi(N) + 1 \implies ed - k \varphi(N) = 1 \ | \frac{e}{N} - \frac{k}{d} | &= \frac{1 - k(N - \varphi(N))}{dN} < \frac{1}{d N^{\frac{1}{2}}} \end{aligned} $$ 所以可以用分数来逼近一个数。之前写过维纳攻击题目 123n = 5074191700883449329907022569116947884084939687495276144216145686129441447648897172294440208136588933629837144541599807190263663613...
离散对数笔记
离散对数学习参考:1、harry0597师傅2、lazzaro 在整数中,离散对数(DL)是一种基于同余运算和原根的一种对数运算 在任何群G中可为所有整数k定义一个幂数为$b^k$,而离散对数$log_{b^{a}}$使得$b^k=a$的整数k。 离散对数在一些特殊情况下可以快速计算,公钥密码学中几个重要算法的基础,是假设寻找离散对数的问题解,在仔细选择过的群中,并不存在有效率的求解算法。 基本定义 生成元 在一个群G中,如果g是G的生成元,即所有G中所有元素都可以被表示成y=g^x,此时x称为y在G中的对数 阶 设 𝑚≥1,gcd(𝑎,𝑚)=1,使得 𝑎^𝑑≡1(mod𝑚) 成立的最小正整数 𝑑 称为 𝑎 对模 𝑚 的指数或者阶。一为𝛿_𝑚(𝑎)。满足 𝑎^𝑑≡1(mod𝑚) 的 𝑑 一定满足 𝑑∣𝜑(𝑚)。 原根 当𝛿_𝑚(𝑎)=𝜑(𝑚)时,称a是模m的原根,简称m的原根 常规sage函数 参数: 求解以base为底 a的对数 ord为base的阶,可忽略 operation可以是+或者...
BUUCTF打怪ing
1.一眼就解密由大小写字母和数字组成尾部是等号 猜测为base64编码 在线解密 2.MD5 题目:e00cf25ad42683b3df678c61f42c6bda MD5消息摘要算法,是Hash算法的一类,MD5算法对输入任意长度的消息进行运行,产生一个128位的消息摘要(32位的数字字母混合码).密文由数字和字母组成,大多位32位,同时具有不可逆的特点,即知道密文无法得到原文 为什么不可逆 非线性变换,刻意设计的”单向陷阱” 在线解密 https://www.somd5.com/ 离线-MD5CrackSp 3.Url编码有很多的百分号就是url编码,直接url解码 4.看我回旋踢1234567891011test1="synt"test2="flag"for i in test1: print(ord(i))for i in test2: print(ord(i)) for x,y in zip(test1,test2): print(ord(x)-ord(y))#计算移位 flag{5cd1004d-86...
二十天速通数字签名密史
DAY 1:第一章:现代密码学开篇前面几节讲的都是密码学发展史,《New Directions in Cryptography》这篇划时代的学术论文带我走进了密码学,密码学真神奇。记录一个知识点数据的三易性:1、易删除 2、易修改 3、易复制在万事具备时1.3节末尾引用了《康熙王朝》里面的“来了来了,风信来了!准备登船收复台湾!”很有意思。进入正题密码学新方向来了,一个数学小故事指数运算带给我们”DH密钥协商”(a,g^b)=(b,g^a)=g^{a*b}密码学灵魂之问这个技术背后的原理是什么?keypoint:单项函数和单项陷门函数的结合,可以用来进行密钥协商。午憩一下。。。。。。话接上回公钥密码学(Public Key Cryptography)在已知的:加密系统=算法+密钥 进化到了:加密系统=算法+公钥+私钥。简直神来之笔。现在引入一个新概念其实不新,但我不会数字签名,任何人都可以验证签名,但是只有私钥拥有者可以签名。令人眼花缭乱的密码术语,写一些没听过的吧,“零知识证明,安全多方计算,承诺,秘密共享”现代密码学核心是计算,计算的核...
RSA学习笔记
非对称加密RSARSA加密 RSA的加密过程表达式 密文= 明文^Emod N公钥=(E,N) E是加密(Encryption)的首字母,N是数字(Number)的首字母 RSA解密 明文=密文^DmodN 私钥(D,N) D是解密(Decryption)的首字母;N是数字(Number)的首字母 生成密钥对(E,D,N) 步骤 准备两个质数p,q。这两个数不能太小,太小则会容易破解,将p乘以q就是N N=p*q 求L(L为中间过程的中间数) L 是 p-1 和 q-1的最小公倍数 就是phi_N 求E E必须满足两个条件:E是一个比1大比L小的数,E和L的最大公约数为1用gcd(X,Y)来表示X,Y的最大公因数则E条件如下: 1 < E < Lgcd(E,L)=1 求D 12#求逆元D=inverse(E,phi_n) 1 < D < L$$E*D mod L = 1E*D\equiv1\pmod{L}$$ RSA算法原理私钥解密的证明$$c^d\equiv m(modn)$$ $$...
hash
题目 1234小明养成了定期修改密码的好习惯,同时,他还是一个CTF爱好者。有一天,他突发奇想,用flag格式来设置密码,为了防止忘记密码,他还把密码进行了md5加密。为了避免被其他人看到全部密码,他还特意修改了其中部分字符为#。你能猜出他的密码吗?plaintext = flag{#00#_P4ssw0rd_N3v3r_F0rg3t_63####}md5 = ac7f4d52c3924925aa9c8a7a1f522451PS: 第一个#是大写字母,第二个#是小写字母,其他是数字。 思路MD5 是一种哈希函数,特点是: 任意输入 → 固定 128 bit(32位十六进制)输出不可逆:无法从哈希值反推原文确定性:相同输入永远得到相同输出利用确定性来验证结果得到flag EXP 12345678910111213141516171819202122232425262728import hashlibimport itertoolsimport stringkey='ac7f4d52c3924925aa9c8a7a1f522451'c=...














