无标题
Revenge
\[
x_1 \equiv ax_0^2 +bx_0+c \mod m\\
x_2 \equiv ax_1^2 +bx_1+c \mod m\\
x_3 \equiv ax_2^2 +bx_2+c \mod m
\]
第一次差分 \[
x_2-x_1 \equiv a(x_1-x_0)(x_1+x_0)+b(x_1-x_0) \mod m\\
x_3-x_2 \equiv a(x_2-x_1)(x_2+x_1)+b(x_2-x_1) \mod m
\] 记 \[
y_i = x_{i+1}-x_{i}
\]
\[
y_1 \equiv a(x_1-x_0)y_0+by_0 \mod m\\
y_2 \equiv a(x_2-x_1)y_1+by_1 \mod m
\]
第二次差分,消掉b \[
y_1^2-y_2y_0 = ay_0y_1(x_0-x_2)
\] 记 \[
y_i^2-y_{i+1}y_{i-1}=\beta_i\\
y_{i-1}y_{i}(x_{i-1}-x_{i+1})=k_i
\] 那么...
lsfr
1.LSFR基本介绍
线性反馈移位寄存器(LFSR, Linear-Feedback Shift
Register)是一种其输入位由其前一个状态的线性函数决定的移位寄存器
最常用的单个位线性函数是异或(XOR)。因此,LFSR
通常是一种其输入位由整个寄存器当前值中某些位进行异或运算所得的移位寄存器。
LFSR
的初始值被称为种子(seed),由于寄存器的操作是确定性的,因此其产生的值序列完全由当前(或之前)的状态决定。同样地,由于寄存器的可能状态数量是有限的,它最终必然会进入一个循环周期。不过,一个精心选择的反馈函数可以使
LFSR 产生一个看起来随机且周期很长的比特序列。
2.Fibonacci LFSRs
1.运算
会影响下一个状态的比特位置被称为抽头(taps)。在图示中,抽头的位置是
[16, 14, 13, 11]。LFSR...
RSA相关总结
RSA简介
1.encrypt
生成两个大素数p,q
计算 作为模数,计算Euler函数 然后随机生成公钥e,满足 当N,e公开作为公钥之后
任何人都可以用公钥加密
2.decrypt
计算私钥 解密
只有拥有私钥d的人可以解密
但是,往往由于参数生成不当,RSA可以被破解
相关数论算法
1.Eculid算法
用一个递归很容易实现
123456def eculid(x,y): r = x % y if r == 0: return y else: return eculid(y,r)
时间复杂度是O()
2.Extend Eculid算法
也是递归
123456def gcdext(x,y): r = x % y if r == 0: return [0,1] else: return [gcdext(y,r)[1],gcdext(y,r)[0] - x//y * gcdext(y,r)[1]]
注意到 ...
无标题
gmssl使用
命令行功能
从2.4版开始,GmSSL提供了sm2、sm2utl命令用于SM2相关的计算。
生成SM2私钥
1$ gmssl sm2 -genkey -sms4 -out sm2.pem
将SM2私钥整数值转换为PEM格式的私钥
1$ gmssl sm2 -inform text -out sm2.pem
导出SM2公钥
1$ gmssl sm2 -in sm2.pem -pubout -out sm2Pub.pem
显示SM2私钥的Z值
1$ gmssl sm2 -genzid -in sm2.pem -id Alice -noout
计算带Z值的杂凑值
1$ gmssl sm2utl -dgst -in msg.txt -pubin -inkey sm2Pub.pem -id Alice
对消息签名
12$ gmssl sm2utl -sign -in msg.txt -inkey sm2.pem -id Alice -out sig.der$ gmssl sm2utl -verify -in msg.txt -sigfile...
sm4
SM2-ECC
signature
...
Certification
JWT(JSON Web Tokens)
JavaScript 对象签名和加密 (JOSE) 是一个框架,指定了在 Internet
上安全传输信息的方式。它最著名的是 JSON Web 令牌
(JWT),用于在网站或应用程序上对自己进行授权。JWT
通常在您通过输入用户名和密码对自己进行身份验证后,通过在浏览器中存储您的“登录会话”来做到这一点。换句话说,网站会为您提供包含您的用户
ID 的...
有向图笔记
Robin定理
要证明命题:“如果一个无向图 \(G\) 有一个强定向(strong
orientation),那么 \(G\) 是
2-边连通的(2-edge-connected)”,我们可以从反证法来理解。
我们首先澄清几个术语:
定义澄清
强定向(strong orientation):将无向图 \(G\) 的每条边赋予一个方向,得到有向图 \(D\),使得 \(D\)
是强连通的(即对于任意两个顶点 \(u,v\),都存在一条从 \(u\) 到 \(v\) 的有向路径)。
2-边连通图(2-edge-connected graph):一个无向图
\(G\)
中没有“桥”(bridge)。也就是说,删除任意一条边,图仍然连通。
反证思路
假设 \(G\) 有一个强定向,但它不是
2-edge-connected。也就是说,\(G\)
存在一条桥(bridge)\(e\)。我们将通过这条桥的性质来得出矛盾。
桥的性质:
如果一条边 \(e = \{u,v\}\)
是桥,那么删除它会把图 \(G\)
分成两个连通块,记作...
openssl使用
BIGNUM(大数)
BIGNUM 是 OpenSSL 里用于存储大整数的结构体,远超普通的
int 或 long,适合密码学中用到的大数运算。
常用操作函数示例:
BN_new() — 创建一个新的大数对象。
BN_free() — 释放大数对象。
BN_hex2bn(BIGNUM **bn, const char *hex) —
从十六进制字符串创建大数。
BN_bn2hex(const BIGNUM *bn) —
把大数转成十六进制字符串。
BN_mod_inverse() — 计算模逆。
BN_mod_mul() — 模乘。
BN_mod_add() — 模加。
BN_rand_range() — 生成范围内随机数。
BN_CTX
是大数计算时的临时变量池,避免频繁申请释放内存。
使用流程:
BN_CTX_new() 创建。
BN_CTX_start() 开始申请临时变量。
BN_CTX_get() 依次申请临时变量(BIGNUM指针)。
计算结束后用 BN_CTX_end() 和...
sympy库的使用
✅ 1. 创建矩阵
1234from sympy import Matrix, symbolsA = Matrix([[1, 2], [3, 4]])print(A)
输出:
123Matrix([[1, 2],[3, 4]])
也可以使用符号变量:
12x, y = symbols('x y')B = Matrix([[x, 1], [2, y]])
✅ 2. 矩阵基本属性
1234print(A.shape) # (2, 2)print(A.rows) # 2print(A.cols) # 2print(A[0, 1]) # 2:访问元素(行列从0开始)
✅ 3. 矩阵加法、乘法、数乘
1234B = Matrix([[5, 6], [7, 8]])print(A + B) # 加法print(A * B) # 矩阵乘法print(2 * A) # 数乘
✅ 4. 行列式与逆矩阵
12print(A.det()) ...