已剪辑自: http://blog.csdn.net/defonds/article/details/42775183

1. 加密的系统不要具备解密的功能,否则 RSA 可能不太合适

公钥加密,私钥解密。加密的系统和解密的系统分开部署,加密的系统不应该同时具备解密的功能,这样即使黑客攻破了加密系统,他拿到的也只是一堆无法破解的密文数据。否则的话,你就要考虑你的场景是否有必要用 RSA 了。
 

2. 可以通过修改生成密钥的长度来调整密文长度

生成密文的长度等于密钥长度。密钥长度越大,生成密文的长度也就越大,加密的速度也就越慢,而密文也就越难被破解掉。著名的安全和效率总是一把双刃剑定律,在这里展现的淋漓尽致。我们必须通过定义密钥的长度在安全加解密效率之间做出一个平衡的选择。
 

3. 生成密文的长度和明文长度无关,但明文长度不能超过密钥长度

不管明文长度是多少,RSA 生成的密文长度总是固定的。
但是明文长度不能超过密钥长度。比如 Java 默认的 RSA 加密实现不允许明文长度超过密钥长度减去 11(单位是字节,也就是 byte)。也就是说,如果我们定义的[……]

阅读全文

已剪辑自: https://blog.csdn.net/u013022210/article/details/52680700

移动端缓存问题

1.html meta头解决方案如下:

  在每个页面头部添加禁止缓存代码

<meta http-equiv=”pragma” content=”no-cache”/>
<meta http-equiv=”expires” content=”0″>

禁止缓存效果不明显

2.通过修改文件名称(加版本号)达到文件加载

项目整体文件加载效果明显

优点:

A.能解决缓存问题,但需要借助其他工具对文件名进行修改,管理

缺点:

A.每次都需要修改每个文件名称,不利于管理和开发

B.面向用户的访问文件地址不能修改,故此初始加载文件也不能被刷新

3.通过修改访问连接(加版本号)达到页面重新加载问题

项目整体文件加载效果明显

优点:

A.能解决缓存问题,适用于登录,注册跳转等

缺点:

A.用户有可能访问的是同一个链接(固定链接),修改不了面向用户的初始链接,因此还是会清除不了缓存

B.每次都需要修改文[……]

阅读全文

已剪辑自: https://www.cnblogs.com/xrq730/p/6662232.html

问题描述

业务有一个需求,我把问题描述一下:

通过代理IP访问国外某网站N,每个IP对应一个固定的网站NCOOKIECOOKIE有失效时间。
并发下,取IP是有一定策略的,取到IP之后拿IP对应的COOKIE,发现COOKIE超过失效时间,则调用脚本访问网站N获取一次数据。
为了防止多线程取到同一个IP,同时发现该IP对应的COOKIE失效,同时去调用脚本更新COOKIE,针对IP加了锁。为了保证锁的全局唯一性,在锁前面加了标识业务的前缀,使用synchronized(lock){…}的方式,锁住锁前缀+IP”,这样保证多线程取到同一个IP,也只有一个IP会更新COOKIE

不知道这个问题有没有说清楚,没说清楚没关系,写一段测试代码:

public class StringThread implements Runnable {

private static final String LOCK_PREFIX = “XXX—“;


privat[……]

阅读全文

已剪辑自: https://blog.csdn.net/u010571844/article/details/46806265

我们在实现对Excel的导入导出的时候,往往需要准确的给用户提示信息,提示到具体的Excel的单元格,这里就需要对Excel的列号进行数字和字母的转换,今天正好用到这个需求,所以就写了一个demo,总结一下:

Java实现

public class ExcelColumn {

public static void main(String[] args) {
String colstr = “AA”;
int colIndex = excelColStrToNum(colstr, colstr.length());
System.out.println(“‘” + colstr + “‘ column index of ” + colIndex);

colIndex = 26;
colstr = excelColIndexToStr(colIndex);
Syst[……]

阅读全文

已剪辑自: http://www.cnblogs.com/yizhiamumu/p/9150462.html

接口的安全性主要围绕Token、Timestamp和Sign三个机制展开设计,保证接口的数据不会被篡改和重复调用。

主要有以下几个部分:

  • Token授权机制

Token授权机制:用户使用用户名密码登录后服务器给客户端返回一个Token(通常是UUID),并将Token-UserId以键值对的形式存放在缓存服务器中。服务端接收到请求后进行Token验证,如果Token不存在,说明请求无效。Token是客户端访问服务端的凭证。

  • 时间戳超时机制

时间戳超时机制:用户每次请求都带上当前时间的时间戳timestamp,服务端接收到timestamp后跟当前时间进行比对,如果时间差大于一定时间(比如5分钟),则认为该请求失效。时间戳超时机制是防御DOS攻击的有效手段。

  • 签名机制

签名机制:将 Token 和 时间戳 加上其他请求参数再用MD5或SHA-1算法(可根据情况加点盐)加密,加密后的数据就是本次[……]

阅读全文

maven构建的项目中默认的java版本是1.5,并且我们在项目属性里面更改了之后,

maven-update project后又会变成默认的1.5版本,解决方式有两种:

  1. mavensetting.xml文件中对全局设置

<profile>   

    <id>jdk1.8</id>

    <activation>   

    <activeByDefault>true</activeByDefault>

    <jdk>1.8</jdk>   

    </activation>

    <properties>   

     <maven.compiler.source>1.8</maven.compiler.source>[……]

阅读全文

json-lib需要区分jdk版本,pom.xml中的配置中需添加上指定的JDK版本既可以,如:

<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>

阿里云maven仓库
在maven的settings.xml 文件里配置mirrors的子节点,添加如下mirror

<mirrors>
<mirror>
<id>alimaven</id>
<name>aliyun maven</name>
<url>http://maven.aliyun.com/nexu[……]

阅读全文

写在前面

通信加密的方案最终形态是HTTPS通信协议

关于密钥

RSA密钥交换+AES对等加密:

服务端:

提供接口,供客户端获取RSA公钥

获取client请求头中经RSA公钥加密过的AES密钥,并使用RSA私钥解密得到AES密钥

使用AES密钥解密请求数据

使用AES密钥加密请求数据

客户端:

生成AES密钥

使用AES密钥加密请求数据

使用RSA公钥加密AES密钥,并将结果添加到httphead

使用AES密钥解密返回数据

密钥生成策略:

  • 系统使用一套固定的RSA密钥,公钥进行存放到客户端,避免公钥通信,后期服务端密钥变更受客户端约束,公钥无过期机制,密钥泄露无法,快速更新密钥。
  • 每次请求前获取最新公钥,客户端通过上次请求公钥的过期时间确定密钥是否过期,服务端密钥对,并在监控过期前获取下次需要的密钥
    • 不同客户端获取[……]

阅读全文