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

阅读全文

写在前面

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

关于密钥

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

服务端:

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

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

使用AES密钥解密请求数据

使用AES密钥加密请求数据

客户端:

生成AES密钥

使用AES密钥加密请求数据

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

使用AES密钥解密返回数据

密钥生成策略:

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

阅读全文

Json-lib的方式:

功能较为简单
对集合类的属性的映射需要手动配置
不支持注解配置

Double/Integer等包装对象,如果值为:null,序列化结果为:0

BigDecimal序列化会出现精度丢失的情况,如:19.90,转为json字符串,会变成19.9丢失后面的0

Jackson的方式:

支持注解配置
支持对jsonkey与属性名绑定

参考:

http://www.cnblogs.com/hoojo/archive/2011/04/22/2024628.html

http://www.cnblogs.com/hoojo/archive/2011/04/21/2023805.html

 

重构

原因

需求变化

架构调整

最佳实践变化

原则

适用

实施

当需要改动的时候再进行优化

CSS样式的优先级:

CSS样式的特指度:(a,b,c,d)

如果用 style 属性应用样式,则 a=1,否则 a=0。

b 为 ID 选择器的数量。

c 为类选择器、属性选择器和伪类的数量。

d 为类型选择器和伪元素的数量。

根据特指度确定样式的优先级

!important为最高优先级

CSS子元素继承父元素的完整列表:  https://www.w3.org/TR/CSS21/propidx.html

CSS伪类

:link 样式应用于具有合法 href 属性的元素。

:visited 样式应用于具有合法 href 属性的超链接元素,并且浏览器的历史记录之中含 有该链接。

:focus 样式应用于获得焦点的超链接元素。当点击、轻触元素,或使用 Tab 键跳转到 当前元素时,元素获得焦点。outline属性有助于键盘访问视角展示

:hover 样式应用于鼠标光标悬浮于超链接之上时。触摸设备,没有光标悬浮状态。因此, 通常当轻触元素时,应用 :hov[……]

阅读全文