加密&解密、签名&验签,在区块链、钱包等领域应用甚广,背后的原理或细节是什么?这里通过图文并茂的故事,外加撸代码的方式,一起理清弄透这4个概念。
一、故事角色和人设
正式开始之前,先介绍一下本文的主人翁Bob。他有2把秘钥:公钥、私钥;生活中,他会遇到3种类型的人:朋友Alice、骗子Doug、可信任的公证人CA。Bob的公钥是公开的,所有人都可见,私钥仅Bob自己可见。
Bob有2把秘钥:公钥BobPub、私钥BobPri
Bob会遇到3类人:Alice、CA、Doug是每类的代表
二、对称加密&解密
故事角色和人设交代清楚后,主人翁Bob遇到了第一个棘手难题:平时通过一款聊天App与朋友Alice联系,某一天收到一份神秘邮件,里面明文写满了历史聊天内容。吓一大跳,还好没聊隐私的事情。惊吓之后,Bob想到了第一个办法:
棘手难题1:明文聊天,网络传输过程中被劫持,有窃听风险;
解决办法1:与Alice约定一个暗号串,对聊天消息加密后再发送;
→ 具体操作步骤如下:
Alice 与 Bob 两人事先约定一个共用密钥key;
Alice 将消息用key加密,将密文邮递给 Bob;
Bob 收到密文后,用key解密,看到明文;
→ 这个过程用到的其实是密码学中的对称加密,实现代码如下:
var crypto = require('crypto');
// Encrypt
function encrypt(str, key) {
var cipher = crypto.createCipher('aes192', key);
var enc = cipher.update(str, 'utf8', 'hex');
enc += cipher.final('hex');
return enc;
}
// Decrypt
function decrypt(str, key) {
var decipher = crypto.createDecipher('aes192', key);
var dec = decipher.update(str, 'hex', 'utf8');
dec += decipher.final('utf8');
return dec;
}
var msg = 'Hey Bob, how about lunch at Taco Bell.';
// Both Bob and Alice have the same key
var key = 'aceport';
// Alice
encrypted_msg = encrypt(msg, key);
console.log(encrypted_msg);
// Bob
decrypted_msg = decrypt(encrypted_msg, key);
console.log(decrypted_msg);
三、非对称加密&解密
Alice是个开朗的姑娘,朋友很多,很快把Bob发明的加密聊天传播给了其它朋友。同时,Alice又是个粗心的姑娘,与所有朋友聊天都用了同一个暗号串。美好的日子没过多久,Bob又收到一份神秘邮件,里面除了满写满了明文聊天内容之外,还多了一串
1、头条易读遵循行业规范,任何转载的稿件都会明确标注作者和来源;
2、本文内容来自“待字闺中”微信公众号,文章版权归待字闺中公众号所有。