Crypto-MT19937
MT19937预测首先介绍该模块的用法:主要用于预测随机数 getrandbits(k)
用法:
12345678910111213141516>>> import random>>> from mt19937predictor import MT19937Predictor>>> predictor = MT19937Predictor()>>> for _ in range(624):... x = random.getrandbits(32)... predictor.setrandbits(x, 32)>>> random.getrandbits(32) == predictor.getrandbits(32)True>>> random.random() == predictor.random()True>>> a = list(range(100))>>> b = list(range(100))>>&g ...
Crypto-Shamir秘密共享协议
Shamir秘密共享协议简述Shamir密钥分享算法最早在1970年基于Lagrange插值和矢量方法提出的,基本思想是分发着通过秘密多项式,将秘密s分解为n个秘密,分发给持有者,其中任意不少于t个秘密均能恢复密文,而任意少于t个秘密均无法得到密文的任何信息。
算法思路
实现代码:
加密:
1234567891011121314a = getPrime(256)b = getPrime(256)c = getPrime(256)d = bytes_to_long(flag)n = getStrongPrime(2048)def poly(x): return (a * x ** 3 + b * x ** 2 + c * x + d) % nfor _ in range(4): x = getRandomNBitInteger(256) print(f'({x}, {poly(x)})')print(n)
解密:
12345678910111213141516171819202122232425262 ...
Crypto-椭圆曲线加密
椭圆曲线:椭圆曲线加密算法,简称ECC,是基于椭圆曲线数学理论实现的一种非对称加密算法。相比RSA,ECC优势是可以使用更短的密钥,来实现与RSA相当或更高的安全,RSA加密算法也是一种非对称加密算法,在公开密钥加密和电子商业中RSA被广泛使用。据研究,160位ECC加密安全性相当于1024位RSA加密,210位ECC加密安全性相当于2048位RSA加密(有待考证)。
椭圆曲线方程:
椭圆曲线Ep ( a , b ) p为质数,x , y ∈ [ 0 , p − 1 ]
y ** 2 = x ** 3 + ax + b (mod p)
表示在p有限域GF(p)上的椭圆曲线方程。
其中,要求曲线是非奇异的(处处可导),有4 a**3 + 27 b * *2 ≠ 0
加法运算:过曲线上的两点A、B画一条直线,找到直线与椭圆曲线的交点,交点关于x轴对称位置的点,定义为A+B,即为加法。如下图所示:A + B = C
二倍运算上述方法无法解释A + A,即两点重合的情况,因此在这种情况下,将椭圆曲线在A点的切线,与椭圆曲线的交点,交点关于x轴对称位置的点,定 ...
Crypto-几类特殊加密
一.Paillier加密介绍Paillier加密系统,是1999年Paillier发明的概率公钥加密系统。基于复合剩余类的困难问题。该加密算法是一种同态加密,满足加法和乘法同态。
1 秘钥生成
2 加密
3.解密
例题[DASCTF 2020 四月春季赛] not_RSA题目:
1234567891011121314151617from Crypto.Util.number import getPrime as getprime ,long_to_bytes,bytes_to_long,inversefrom secret import flag,p,qfrom sympy import isprime,nextprimeimport randomm=bytes_to_long(flag)n=p*qg=n+1r=random.randint(1,n)c=(pow(g,m,n*n)*pow(r,n,n*n))%(n*n)print "c=%d"%(c)print "n=%d"%(n)c=2908891105471150925221561523101 ...
Crypto-AES对称加密
对称加密AES加密思路:
根据分组进行填充
待加密的明文以16字节分组进行加密,如果数据字节长度不是16的倍数,最后的一组则需要在有效数据后面进行填充,使得数据长度变为16字节,AES填充方式分为NoPadding、PKCS5(PKCS7)、ISO10126、Zeros。 NoPadding:不填充,那就只能加密长度为16倍数的数据,一般不使用 Zeros:补0,如果原数据长度恰好是16的倍数,也要补16个0 ISO10126:最后一个字节是填充的字节数(包括最后一字节),其他全部填随机数
加密方法:
加密方式分为五种:电码本模式(Electronic Codebook Book (ECB))、密码分组链接模式(Cipher Block Chaining (CBC))、计算器模式(Counter (CTR))、密码反馈模式(Cipher FeedBack (CFB))、输出反馈模式(Output FeedBack (OFB))。实际应用比较多的是ECB和CBC。
ECB模式(Electronic Code Book Mode)ECB模式是最早采用和最简单的模式,它将加密的 ...
Java-SpringSecurity详解
Spring Security1.简介 Spring Security 是 Spring 家族中的一个安全管理框架。相比与另外一个安全框架Shiro,它提供了更丰富的功能,社区资源也比Shiro丰富。
一般来说中大型的项目都是使用SpringSecurity 来做安全框架。小项目有Shiro的比较多,因为相比与SpringSecurity,Shiro的上手更加的简单。
一般Web应用的需要进行认证和授权。
认证:验证当前访问系统的是不是本系统的用户,并且要确认具体是哪个用户
授权:经过认证后判断当前用户是否有权限进行某个操作
而认证和授权也是SpringSecurity作为安全框架的核心功能。
2.所需依赖1234<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-starter-security</artifactId></dependency&g ...
Java-Springboot-Mybatis plus
SpringBoot整合MyBatis-Plus后,可以简化dao和service层开发。
Dao层:传统开发:需要在dao层接口中写所有的sql语句,很繁琐。
MP:只需要对dao层接口集成BaseMapper类(泛型为操作的实体类类型)即可,这样在dao接口中就有了一些常用的sql语句,可以直接使用。
12345@Mapper@Repositorypublic interface BookDao extends BaseMapper<Book> {}
当然,MP兼容自行书写sql语句,可以在该接口中继续自定义sql语句。
Service层:类似于dao:
在service接口中集成IService 类
在service实现中:分别继承和实现一个类,继承传参为(dao接口,操作实体类)
1public class BookServiceImpl extends ServiceImpl<BookDao, Book> implements BookService
这样,bookservice中即可直接使用相关调用dao层的方法。
Java-Springboot-Restful风格开发
Restful 开发传统风格:
http://localhost/user/getById?id = 1
http://localhost/user/usersave
Restful:
http://localhost/user/1
http://localhost/user
可以看出,Restful风格开发的访问路径并不需要写方法,因为restful风格开发会根据访问的请求方式执行相对应的方法。
若是get请求则执行查询,post请求执行添加,put请求执行编辑,delete请求执行删除。
注解开发1.@RestController = @Controller + @Responsebody
该注解可以指定类为controller,并声明返回值为数据。
2.@RequestMapping的替换:
GetMapping:用于表示查询语句的访问路径。
查询所有不需要接收数据,查询单个添加@RequestBody接收数据。
PostMapping:用于表示增加操作的访问路径。
添加@RequestBody接收数据。
PutMapping:用于表示编辑 ...
Java-Springboot介绍
一.Springboot入门案例步骤:
①:创建新模块,选择Spring Initializr,并配置模块相关基础信息(必须在联网条件下创建)
可以采用spring官方的网址 https://start.spring.io/,也可以用阿里的网址 https://start.aliyun.com
②:选择当前模块需要使用的技术集
做什么项目勾选什么模块。。。
③:开发控制器类
123@RequestMapping("/books")public class BookController {}
④:运行自动生成的Application类
123456@SpringBootApplicationpublic class Application { public static void main(String[] args) { SpringApplication.run(Application.class,args); }}
二.pom坐标介绍
parent
starter
引导类
内嵌tomcat
...
Crypto-RSA-Coppersmith攻击
Coppersmith 攻击定理在一个**e阶的mod n多项式f (x)**中,如果有一个根小于n^1/e,就可以运用一个O (log n)的算法求出这些根。 这个定理可以应用于rsa算法。
试着构造关于m的同余式
系数已知;进行sage运算
代码实现:
1234567891011121314151617181920import gmpy2from Crypto.Util.number import *from sympy import *from sympy.polys.polyoptions import Flag# 求flagn = 1282053047437519858896793511958367994343243469961297538962349179826472545772140185245802901923960705910320078188476971932601300513960801047049815941906028542419367773244316735646779007739922734635347170095875301524807254 ...