密码学的一些知识-Node

Home文章
 简介:简单介绍我所知道的密码学

由于要解决自己的博客自动登录问题,而引发的.........

警告:本人处于刚接触阶段,如果你要了解密码学,那我80%正确页不算误导你,如果你深悉此道,那指点下我理解的错误的地方也算是一桩美事哉?

 

简单加密

比如你想说abc,  加密算法是字母往后移一位,加密后的结果就是 bcd

 

关于哈希算法

特点:函数实现是单向的、不可逆的。适合做摘要

如果我们的哈希函数,内容改动一点,那么结果从形式上天差地别,找不出规律

如果我们千千万万的n次方的数据,加密后找不出两个相同的结果

同时我们的结果有不是特别长,没法被破解

ok 我们需要这个哈希函数

常见的哈希算法

'md5','sha','sha1','sha256','sha512','RSA-SHA','RSA-SHA1','RSA-SHA256','RSA-SHA512'

 

关于mhac

如果我们记住“1”的sha1值:356a192b7913b04c54574d18c28d46e6395428ab

那么理论上我们不就破解了吗?

所以HMAC是密钥相关的哈希运算消息认证码(Hash-based Message Authentication Code),HMAC运算利用哈希算法,以一个密钥和一个消息为输入,生成一个消息摘要作为输出。

所以mhac比原有哈希算法基础上多了个密匙

 

例子:

crypto.createHash("sha1").update(‘1234567’);

 

 

对称加密

复杂函数加密,函数可逆,同样也可以准备一个密匙来保证你的

这种适合大文件,内容越长,加密后的结果越长

常见算法 'blowfish','aes-256-cbc','cast','des','des3','idea','rc2','rc4','seed'

例子:

//加密
function cipher(algorithm, key, buf ,cb){
 var encrypted = "";
 var cip = crypto.createCipher(algorithm, key);
 encrypted += cip.update(buf, 'binary', 'hex');
 encrypted += cip.final('hex');
 cb(encrypted);
}

//解密
function decipher(algorithm, key, encrypted,cb){
 var decrypted = "";
 var decipher = crypto.createDecipher(algorithm, key);
 decrypted += decipher.update(encrypted, 'hex', 'binary');
 decrypted += decipher.final('binary');
 cb(decrypted);
}

 

 

非对称加密

非对称加密算法是一类与众不同的加密算法,它的密钥不是1个,而是2个(一对),我们先姑且称它们为密钥K1和密钥K2。非对称加密算法的特点是,如果用密钥K1进行加密,则有且仅有密钥K2能进行解密;

以上那些都不适合网上传输,为啥?密匙怎么传啊?

有了非对称加密这个问题就可以解决了,我发布k1出去,给朋友说给我加密个电影回来,我再解开自己看.......

数字签名应用

常见的一个问题是,如果我的网站需要自动登录,同户名:xiaoming 我如何标记他是xiaoming呢?

我用K1在服务器端标记下xiaoming在cookie,然后自动登录验证时只需验证下K2解密后的用户名是不是xiaoming,就可以判断了。完美的闭环

 

总结:种种相关的函数组合扭曲,足以让人破解不了。如果单一而论听说国人破解了部分md5,以我所知数学的严谨性而言绝对只是相对的,对应现阶段这些常用的哈希函数基本上可以代表不可逆,无碰撞......

 

 

 

 

 

 



评论
Login