已剪辑自: 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://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算法(可根据情况加点盐)加密,加密后的数据就是本次[……]

阅读全文

写在前面

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

关于密钥

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

服务端:

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

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

使用AES密钥解密请求数据

使用AES密钥加密请求数据

客户端:

生成AES密钥

使用AES密钥加密请求数据

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

使用AES密钥解密返回数据

密钥生成策略:

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

阅读全文

图文消息(适用于订阅号)

先回复一条图文消息,将用户的openid带在链接上,然后用户通过点击图文消息的链接打开最终的页面,这么做用户体验非常非常不好,而且每个菜单都得这么干;

服务号接口(适用于服务号):

调用服务号提供的高级接口。

另:关于openid的存放,由于openid是唯一确定用户登录或其它操作的凭证,所以在回复图文消息或者处理网页跳转的时候,都不能把openid放在http参数中,包括get/post请求,应当存放在服务端,通过sessionid或者其它方式进行关联。