hash 杂凑函数 或者 散列函数 是不可逆的(在密码学里面的 hash 函数,基本上不但是不可逆的,而且是对于冲突有抗性 - 也就是给定一个输入和输出的 pair,很难找到另外一个不同的输入可以生成相同的输出)。而加密的话需要是可逆的。
几个例子: 对于 etag 而言,目标是:如果两段内容内容不同,需要生成不同的特征码,所以使用 hash。md5/sha1 等等都可以 对于保存的密码,也是一样,需要验证密码是否符合,所以也使用 hash。如果是用加密的话,那就是作死的节奏。 那么如果我写一封邮件给你,不想 NSA 看,但是我又希望你看见内容,那么我就发送一封“加密”邮件给你。如果我是发送的 hash 给你,除非我们有预先预定,否则你也看不懂。
希望这几个例子能帮助你轻松理解。
写到这里我突然想起来个事情,bcrypt & scrypt 都是杂凑函数,而非加密算法。
赞。
有一个小问题,
并根据生成的响应内容生成 MD5 加密的 ETag
MD5 不是加密,所以这里应该是 MD5 散列
我们最近做的帮推客,是一个 P2P 的个人影响力交换平台,开发过程中用的就是前后端分离,Ember.js 和 Python Flask 的 API 搭配。我来说说我们的吐槽与经验吧。开发时间是 2 月中旬。
这些吐槽与经验,有可能不对或者有更好的解决方案,请大家指教。
Route
来处理,有的是中间的 Route
需要处理,这样的话 socket.io 和 Ember.js 的通信比较坑,后来我们用了这样一种方式解决
ApplicationRoute
中,加入 socket.io 的初始代码socket.on('some_event')
触发的时候,找到对应的 container
并且通过 send
发送事件App.ApplicationRoute = Ember.Route.extend({
init_io_dispatcher: function () {
var me = this;
socket.on('friend_count_update', function (data) {
var friend_count_checks_route = me.container.lookup('route:friend_count_checks');
if (friend_count_checks_route) {
friend_count_checks_route.send('update_friend_checks');
}
var dashboard_route = me.container.lookup('route:dashboard');
if (dashboar_route) {
dashboard_route.send('update_friend_checks');
}
});
}).on('init')
});
上面写的比较乱,我会总结一下写出来。
我们在用 papertrail,uclogs 有什么特色吗?
-nw
@qsun IE 没有么