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 ...
Crypto-RSA-几类RSA
几类RSA1.已知m的高位题目:
123456789101112131415161718from Crypto.Util.number import getPrime,bytes_to_long,long_to_bytesfrom random import randintfrom secret import flagp = getPrime(1024)q = getPrime(1024)n = p*qprint(n)m = bytes_to_long(long_to_bytes(randint(0,30))*208+flag)assert(m.bit_length()==2044)print((m>>315)<<315)c = pow(m,3,n)print(c)#141139481892087130119093963049703776263240446335611550203664062844516140542607089345988407813973269609217188928016532051597530915599011140825564645764 ...
Crypto-RSA:选择明密文攻击
选择明密文攻击1.选择明文攻击 :适用情况:
对输入的任意明文服务器返回 RSA 加密结果。
可以通过选择明文攻击来获取 n。
原理:
exp:
123456789101112131415161718192021222324252627282930import gmpy2def get_n(): nset = [] c2 = server_encode(2) c4 = server_encode(4) c8 = server_encode(8) nset.append(c2 * c2 - c4) nset.append(c2 * c2 * c2 - c8) c3 = server_encode(3) c9 = server_encode(9) c27 = server_encode(27) nset.append(c3 * c3 - c9) nset.append(c3 * c3 * c3 - c27) c5 = server_encode(5) c25 = server_encode(25) c12 ...
Crypto-RSA:私钥指数d攻击
私钥指数d的相关攻击1.d泄露攻击:可攻击特征:
首先当 d 泄露之后,我们自然可以解密所有加密的消息。我们甚至还可以对模数 N 进行分解。
原理:
我们知道e * d ≡ 1 (mod phi) -> e * d = k * phi + 1
所以如果得到e和d的话我们可以暴力k得到phi(一般根据phi的位数作为判断条件)
这样我们就得到了phi,如果q为p下一个素数,则可以对phi开根号,向前和向后分别取素数得到p,q。
1234567891011121314151617181920import gmpy2import sympyfrom Crypto.Util.number import *c = 227308701871338243242286750281177195505796217864184105264331005554212165092597687010635656512667133302213943018216688312232554762588815028436617087764862130174485879239972082741223788189 ...
Crypto-RSA:公钥指数e攻击
公钥指数e的相关攻击1.小公钥指数攻击可攻击特征:
e 特别小,比如 e 为 3。
加密分析:
e=3, 公钥中的加密指数e很小,但是模数n很大有RSA加密公式: C=M^e % n (C密文,M明文)则:
当M^e < n 时,C = M^e ,所以对C开方就能得到M
当M^e > n 时,此时用爆破的方法假设我们 M^e / n 的商为 k 余数为C,则M^e = kn + C,对K进行爆破,只要k满足 kn + C能够开e次方就可以得明文
exp:
12345678910111213141516from gmpy2 import irootimport libnume = 0x3n = c = k = 0while 1: res = gmpy2.iroot(c+k*n,e) #c+k*n 开3次方根 能开3次方即可 #print(res) #res = (mpz(1304000448281971381981734052456302315991930504782460047879974048879 ...
Crypto-RSA:模相关攻击
模相关攻击1.暴力分解N:可攻击特征:
在 N 的比特位数小于 512 的时候,可以采用大整数分解的策略获取 p 和 q。
攻击方法:
大整数分解一般有以下两种方法:
在线数据库查询:http://factordb.com/
yafu工具 (适用于p和q相近或相差很多)
特别的,当q时p的下一个素数时,可以使用以下方法求得p。
1p = prevprime(gmpy2.iroot(n,2)[0])
p或q选取不当分解N:
当 RSA 中 p 和 q 选取不当时,我们也可以进行攻击。比如一般有以下四种情况
|p-q|很大:当|p-q| 很大时,那么其中p或q有一个值一定很小,我们可以用试除法穷举p或q。
|p-q|很小:yafu分解或开根号后在附近枚举。
q ≈ t * p : 对n/t开根号,在附近找p。
2.多因子:可攻击特征:
N可被分解为多个素数
原理:
如果选取两个以上的素数,记为 p1,p2,p3.,它们相乘得到 n,那么:
φ(n)=(p1−1)(p2−1)(p3−1)
欧拉函数性质:
(1) p^k型欧拉函数:
若N是质数p(即 ...