Crypto-RSA:dp或dq泄露
dp或dq泄露1.dp和dq的泄露(已知dp,dq,p,q,c)公式推导转载至https://blog.csdn.net/qq_32350719/article/details/102719279
原本dp和dq的作用是用来加快加解密速度的,但是由于dp和p,dq和q的关系密切,一旦泄漏,将造成很大的安全隐患
这里就不再次赘述了,只写出对解题相关的
dp = d mod(p-1)
dq = d mod(q-1)
InvQ * q = 1 mod p
数学推导最后得出:
m1 = c^{dq }mod q
m2 = c^{dp} mod p
m = (((m2−m1)∗p−1 mod q)p+m1) mod n
exp:
123456789101112131415import gmpy2 from Crypto.Util.number import long_to_bytes p = 8637633767257008567099653486541091171320491509433615447539162437911 ...
Crypto-RSA基础(从入门到入坟)
RSA原理+基础题目简介:RSA是非对称加密,采用公钥加密,私钥解密。
解密的难度在于大整数N的难分解性。
算法描述
1.p,q,e均已知,求解出私钥d。exp:
12345678import gmpy2p=q=e=phi = (q-1) * (p-1)d = gmpy2.invert(e,phi) print(d)
2.p,q,e,c已知,求解m。exp:
1234567891011import gmpy2p = q = e = c = n = q*pphi = (q-1) * (p-1)d = gmpy2.invert(e,phi)m = gmpy2.powmod(c,d,n)print(m)
Crypto-RSA:数论基础运算
数论基础模运算规则:模运算与基本四则运算有些相似,但是除法例外。其规则如下:
(a + b) % p = (a % p + b % p) % p
(a - b) % p = (a % p - b % p) % p
(a * b) % p = (a % p * b % p) % p
(a ^ b) % p = ((a % p)^b) % p
结合律:
((a+b) % p + c) % p = (a + (b+c) % p) % p
((a*b) % p * c)% p = (a (bc)%p) % p
交换律:
(a + b) % p = (b+a) % p
(a * b) % p = (b * a) % p
分配律:
((a +b)% p * c) % p = ((a * c) %p + (b * c) % p) % p
重要定理:
若a≡b (% p),则对于任意的c,都有(a + c) ≡ (b + c) (%p)
若a≡b (% p),则对于任意的正整数c,都有(a * ...
Crypto-e与φ(n)不互素时
e与φ(n)不互素时摘自大佬博客:e与φ(n)不互素时 | happi0 (gitee.io)
当gcd(e,φ(n)) != 1 的一些思路(非脚本!)
1. m ** GCD < n时原理:首先,找出gcd
1gcd(e,φ(n)) == t
那么可以找到e’满足
1e' = e // t
此时,显然gcd(e’,phi) =1,于是
123e * d = 1 + k * phi(e // t) * (d * t) = 1 + k * phie' * (d*t) = 1 + k * phi
所以可以求出dt,那么我们如何通过dt 解密呢
根据rsa基本原理,我们可以得到如下等式:
1c ** d mod n == m
1c ** d == m + k*n
等式两边同时t方
1c ** (d*t) == m**t + K*n
同时mod n得到
1c ** d*t mod n == m**t
所以,只需把d*t当作私钥解密得到的数字开t次方即可
条件:对于式子
1c ** d*t == m**t + K*n
由于结果 ...
Crypto-z3约束器
引自大佬:z3约束求解器 | happi0 (gitee.io)
z3简介:
官方: z3是由微软公司开发的一个优秀的SMT求解器(也就定理证明器),它能够检查逻辑表达式的可满足性。
人话: 解方程
通过下面一道题来展示z3的优势
题目:1234567891011121314151617#!/usr/bin/env python3import sympyimport jsonm = sympy.randprime(2**257, 2**258) M = sympy.randprime(2**257, 2**258) a, b, c = [(sympy.randprime(2**256, 2**257) % m) for _ in range(3)] x = (a + b * 3) % my = (b - c * 5) % mz = (a + c * 8) % mflag = int(open('flag', ...
Java-Mybatis深入
MyBatis深入Mybatis的Dao层实现介于原始mybatis过于繁琐,
我们采用代理开发方式:
采用Mybatis的代理开发方式实现DAO 层的开发,这种方式是我们后面进入企业的主流。Mapper 接口开发方法只需要程序员编写Mapper 接口(相当于Dao 接口),由Mybatis框架根据接口定义创建接口的动态代理对象,代理对象的方法体同上边Dao接口实现类方法。
Mapper 接口开发需要遵循以下规范:
1、Mapper.xml文件中的namespace与mapper接口的全限定名相同
2、Mapper接口方法名和Mapper.xml中定义的每个statement的id相同
3、Mapper接口方法的输入参数类型和mapper.xml中定义的每个sql的parameterType的类型相同
4、Mapper接口方法的输出参数类型和mapper.xml中定义的每个sql的resultType的类型相同
只需将原先手动的
1List<User> userList= sqlSession.selectList("userMapper.findAll" ...
Java-Mybatis入门
MyBatis入门1.什么是Mybatis
mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动、创建连接、创建statement等繁杂的过程。
mybatis通过xml或注解的方式将要执行的各种statement配置起来,并通过java对象和statement中sql的动态参数进行映射生成最终执行的sql语句。
最后mybatis框架执行sql并将结果映射为java对象并返回。采用ORM思想解决了实体和数据库映射的问题,对jdbc进行了封装,屏蔽了jdbcapi底层访问细节,使我们不用与jdbcapi打交道,就可以完成对数据库的持久化操作。
MyBatis开发步骤:
①添加MyBatis的坐标
②创建user数据表
③编写User实体类
④编写映射文件UserMapper.xml
⑤编写核心文件SqlMapConfig.xml
⑥编写测试类
环境搭建:1.导入MyBatis的坐标和其他相关坐标
12345678910111213<!--mybatis坐标--><depend ...
Java-Spring声明式事务控制
声明式事务控制1.什么是声明式事务控制Spring 的声明式事务顾名思义就是采用声明的方式来处理事务。这里所说的声明,就是指在配置文件中声明,用在Spring 配置文件中声明式的处理事务来代替代码式的处理事务。
底层是AOP思想,即将控制事务作为通知织入到业务方法中进行加强。
声明式事务处理的作用
事务管理不侵入开发的组件。具体来说,业务逻辑对象就不会意识到正在事务管理之中,事实上也应该如此,因为事务管理是属于系统层面的服务,而不是业务逻辑的一部分,如果想要改变事务管理策划的话,也只需要在定义文件中重新配置即可
在不需要事务管理的时候,只要在设定文件上修改一下,即可移去事务管理服务,无需改变代码重新编译,这样维护起来极其方便
2. 声明式事务控制的实现基于xml配置方式①引入tx命名空间
12xmlns:tx="http://www.springframework.org/schema/tx"http://www.springframework.org/schema/tx http://www.springframework.org/schema/tx/spri ...
Java-SpringAOP
面向切面编程-Spring AOP一.AOP介绍1.什么是AOPAOP 为Aspect Oriented Programming 的缩写,意思为面向切面编程,是通过预编译方式和运行期动态代理实现程序功能的统一维护的一种技术。
作用:在程序运行期间,在不修改源码的情况下对方法进行功能增强
优势:减少重复代码,提高开发效率,并且便于维护
2.AOP的底层实现实际上,AOP 的底层是通过Spring 提供的的动态代理技术实现的。在运行期间,Spring通过动态代理技术动态的生成代理对象,代理对象方法执行时进行增强功能的介入,在去调用目标对象的方法,从而完成功能的增强。
3. AOP 的动态代理技术常用的动态代理技术:
JDK 代理: 基于接口的动态代理技术 —用于存在接口时,依据接口生成代理对象
cglib 代理:基于父类的动态代理技术 —用于没有接口时,直接将目标对象作为父类生成代理对象
图解:
JDK 的动态代理:
①目标类接口
123public interface TargetInterface { public void method ...
Java-SpringMVC拦截器
SpringMVC拦截器-Interceptor1.SpringMVC拦截器Spring MVC 的拦截器类似于Servlet 开发中的过滤器Filter,用于对处理器进行预处理和后处理。将拦截器按一定的顺序联结成一条链,这条链称为拦截器链(Interceptor Chain)。在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。
2.拦截器和过滤器区别
3.拦截器实现
创建拦截器类实现HandlerInterceptor接口
配置拦截器
测试拦截器的拦截效果
1.实现接口:
1234567891011public class MyHandlerInterceptor1 implements HandlerInterceptor {public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) { System.out.println("pr ...