[转载]各种加密算法比较
以下内容转载自cnblogs,仅优化排版。
加密算法选择:
对称加密: AES
非对称加密: ECC
消息摘要: MD5
数字签名:DSA
对称加密算法(加解密密钥相同)
名称
密钥长度
运算速度
安全性
资源消耗
DES
56位
较快
低
中
3DES
112位或168位
慢
中
高
AES
128、192、256位
快
高
低
非对称算法(加密密钥和解密密钥不同)
名称
成熟度
安全性(取决于密钥长度)
运算速度
资源消耗
RSA
高
高
慢
高
DSA
高
高
慢
只能用于数字签名
ECC
低
高
快
低(计算量小,存储空间占用小,带宽要求低)
散列算法比较
名称
安全性
速度
SHA-1
高
慢
MD5
中
快
对称与非对称算法比较
名称
密钥管理
安全性
速度
对称算法
比较难,不适合互联网,一般用于内部系统
中
快好几个数量级(软件加解密速度至少快100倍,每秒可以加解密数M比特数据),适合大数据量的加解密处理
非对称算法
密钥容易管理
高
慢,适合小数据量加解密或数据签名
算法选择(从 ...
Spring Boot JPA @Query注解的一个BUG
JPA的@Query注解在使用like关键字时且为复杂语句时存在截断后面SQL的BUG。具体如下。
BUG现象@Query("select t from T t where t.name in (:names) and (t.dz like %:searchKey% or t.hjdz = :searchKey)")@Query("select t from T t where t.dz like %:searchKey% ")
上面的两条语句,第二条执行正常,第一条会出现异常的返回结果,等同于
@Query("select t from T t where t.name in (:names) and (t.dz like %:searchKey% )")
即,整个语句从like往后被截断。
解决方案
方案1:在参数传递过来前就把 %%号拼好,如 searchKey=”a” 改为 searchKey =”%a%” ,@Query中 like 去除%%。
@Query("select t ...
Windows 10 删除多余盘符
Windows 10 有个bug,偶然会出现,设备已经弹出,但是盘符依然存在的情况,比如小米路由盘,百度云管家等的盘符。不仅是难看,而且如果设备已经不存在,但盘符还在,下次再打开[此电脑]时,会转圈圈很久。
解决方法是删除以下键值中的多余项即可:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Explorer\MyComputer\Namespace
Spring Boot内嵌web容器启用GZIP压缩
在application.properties里启用压缩,并设置压缩支持的格式(默认支持text/html等,但不支持application/json),设置超过多少字节进行需要压缩
server.compression.enabled=trueserver.compression.mime-types=application/json,application/xml,text/html,text/xml,text/plainserver.compression.min-response-size=1024
Spring Boot + IDEA 远程调试
Spring Boot 可以打包成可执行的Jar 或者 War。如果用可执行的Jar,那就是用了内嵌的Web容器。如果是War,那么就部署在独立的Web容器中。下面针对这两种分别说一下,如何进行远程调试。
Spring Boot 可执行Jar包的远程调试
IDEA配置远程调试
[Run] - [Edit Configrations…] , 点击+号,新建 remote
重要的是下方的HOST,是远端的IP地址。上面横线所绘参数,就是下一步启动jar的额外参数。
apply-save后,就已经能在IDEA的主界面右上角,DEBUG按钮的位置看到新配置的remote。
带参数启动需远程调试的Jar
java -agentlib:jdwp=transport=dt_socket,server=y,suspend=n,address=5005 -jar demo4doc.jar
注意这里把5005作为调试端口,需要应用服务器开放5005端口的防火墙。
在IDEA中,选择remote,启动DEBUG,设置断点,这时访问应用,会自动在IDEA处捕捉断点,一如本地调试。
To ...
SQL Server 查看SQL执行历史记录
SELECT top 100 ST.text,*FROM sys.dm_exec_query_stats QSCROSS APPLY sys.dm_exec_sql_text(QS.sql_handle) STorder by last_execution_time desc
Spring中实现SQL Server with(nolock) hint
在SQL Server的使用过程中,为了避免读锁,提高查询效率或不在乎脏读的场景下,通常会在SQL语句中使用 with(nolock) hint。那么在Spring下如何获得相同的效果呢?下面介绍下具体实现和验证过程。
实现nolock是一个SQL Server独有的hint指令,肯定不能硬编码的方式实现,否则切换数据库的时候会痛不欲生。nolock是一种锁机制,很容易想到应该将其转换为事务级别来在java中实现。通过查阅MSDN得知,nolock 等同于 事务级别为:read uncommitted。
Spring 提供了@Transactional注解,在这个注解可以针对类或者方法设置事务级别。现我们通过这个注解,设置事务级别为READ_UNCOMMITTED。如下例:
@Transactional(isolation = Isolation.READ_UNCOMMITTED)@Query(value = "select xjjgk from MisxjjgkEntity xjjgk where xjjgk.jlzt = 0 and xjjgk.bgdh = ?1 a ...
设计模式演绎-建造者模式
定义建造者模式,也叫做生成器模式。
Separate the construction of a complex object from its representation so that the same construction process can create different representations.
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。
通用类图
通用代码/* 产品类 */public class Product{ public void doSomething(){ // 业务逻辑 }}/* 抽象建造者 */public abstract class Builder{ //设置产品的不同部分,以获得不同的产品 public abstract void setPart(); //建造产品 public abstract Product buildProduct(); }/* 具体建造者 */public c ...
Token实现规范
目标为RESTful架构的系统交互规定token的约定及提供一些建议。
技术[约定] token的生成使用jwt 0.7.0 。以下为maven依赖示例。
<dependency> <groupId>io.jsonwebtoken</groupId> <artifactId>jjwt</artifactId> <version>0.7.0</version></dependency>
[约定] token的生成算法使用HS512。
[约定] claim段中的key使用小写,最多不能超过5个字符。
[建议] claim段中的常用key名建议。
key
含义
sub
用户名
crt
生成时间
role
角色
auth
权限
[建议] token的过期时间应大于12小时。
[建议] token的最大长度应小于 2 KB,因为tomcat的默认maxHttpHeaderSize是 4 KB。
[约定] 前端在向后端传递token时,应将token放入head的 ...
sonar使用记录
此文记录使用sonar中遇到的坑以及解决方法。先介绍一下我的环境
SonarQube 版本:6.5
SonarQube OS:Centos 7
MySQL 版本:5.7
SonarScaner 版本:3.0.3
SonarScanner OS:Win 10
SonarQube 配置配置文件在conf目录下,以下是最简单的配置。需要注意的是jdbc url上的一堆参数。
sonar.jdbc.username= # 数据库用户名sonar.jdbc.password= # 数据库密码sonar.jdbc.url=jdbc:mysql://localhost:3306/sonar?useUnicode=true&characterEncoding=utf8&rewriteBatchedStatements=true&useConfigs=maxPerformance&useSSL=falsesonar.web.port= #访问端口 默认是9000sonar.path.logs= #日志路径
启用tokenSonarScanner的配 ...