HTTPS 协议中,为什么需要第一步交换随机数

最近在学习HTTPS 按照流程:双方交换 random1 和 random2 客户端生成 random3 作为 pre master secret,并通过被签名的可靠公钥加密后传给 server, 这样双方都拿 random1 random2 random3 通过算法各自生成 master secret 在这里,只有 random3 是能够保证不被第三人知道的,为什么公开的 random1 和 random2 有存在的必要?为什么不直接生成 master secret 发过去? 查了查资料,这里是因为前向安全性。加入随机参数,使得:即使现在所有密钥都泄露了,历史消息也不会被破解。 https://www.zhihu.com/question/45203206 ... read more

部分安卓机默认字体大小改变导致webview内rem计算错误

function adapt(){ var d = window.document.createElement('div'); d.style.width = '1rem'; d.style.display = "none"; var head = window.document.getElementsByTagName('head')[0]; head.appendChild(d); var defaultFontSize = parseFloat(window.getComputedStyle(d, null).getPropertyValue('width')); return defaultFontSize }; 获取实际根字体大小后再计算比例差值 pxOneRem = pxOneRem * 16 / adapt(); docEl.style.fontSize = pxOneRem + 'px' ... read more

我,不同意

不同意 ... read more

五子棋小游戏

看到一个帖子说腾讯前端的面试题是让写一个五子棋小游戏 实现胜负判断,并给出赢棋提示。 任意一方赢棋,锁定棋盘。 尽可能考虑游戏的扩展性,界面可用 DOM/ Canvas 实现,并且切换实现方式代价最小。 实现悔棋和撤销悔棋功能。 人机对战部分可选。 挺有意思的,尝试自己写一个。 代码:https://github.com/chairuosen/my-five demo:http://demo.ruosen.io/my-five/dist/ 思路 首先,要求渲染层可替换,那么逻辑代码就一定要高度抽象,仅对数据操作,然后每一次变动由数据渲染出画面,应该对外提供一个五子棋类,提供api查询棋盘状态,和下棋,撤销,重置等动作。然后可以注册update事件监听来更新渲染。 类 棋子: 状态[未分配,黑,白] 重置方法 因为要点击空白部分来放置棋子,与其判断点击位置来放置棋子数据,不如一开始就铺满棋子只是不显示, ... read more

js 实现 immutable

想到一种利用Proxy实现immutable的方法,非常简单,不知道为什么其他库那么大? function immutable(source) { return new Proxy(source,{ get:function(target,key){ try{ return immutable(target[key]); }catch(e){ return target[key]; } },set:function(){} }); } https://github.com/chairuosen/my-immutable-js ... read more