文/金九链
区块链里最靠谱的东西,就是加密。因为加密是数学,不论何时,何地,谁,只要用这个加密算法,输入的东西不变,输出的一定依然是那个永恒的东西。
很多人对公钥私钥很懵圈。其实只要记住2条就好了:
1、公钥加密,私钥解密 2、私钥签名,公钥验签
下面,根据RSA加密算法,给3个例子:
第一个例子,生成私钥公钥。
const NodeRSA=require('node-rsa')
const fs=require('fs')
const private_file='./private.pem'
const public_file='./public.pem'
var key=new NodeRSA({b:512})
key.setOptions({encryptionScheme:'pkcs1'})
const privateKey=key.exportKey('private')
fs.writeFile(private_file,privateKey,(err)=>{
if(err) throw err
console.log('私钥已保存')
})
const publicKey=key.exportKey('public')
fs.writeFile(public_file,publicKey,(err)=>{
if(err) throw err
console.log('公钥已保存')
})
第二个例子,公钥加密,私钥解密
const NodeRSA = require('node-rsa')
const fs = require("fs")
const str = 'hello'
const public_file="./public.pem"
const private_file="./private.pem"
fs.exists(public_file, function (exists) {
if (exists) {
//公钥加密
var pem = fs.readFileSync(public_file, 'utf8')
var key = new NodeRSA(pem)
encrypted = key.encrypt(str, 'base64')
console.log('encrypted:' + encrypted)
fs.exists(private_file, function (exists) {
if (exists) {
//私钥解密
var pem = fs.readFileSync(private_file, 'utf8')
var key = new NodeRSA(pem)
var decrypted = key.decrypt(encrypted, 'utf8')
console.log('decrypted:' + decrypted)
}
})
}
})
第三个例子,私钥签名,公钥验签
const NodeRSA = require('node-rsa')
const fs = require("fs")
const str = 'hello'
const public_file = "./public.pem"
const private_file = "./private.pem"
fs.exists(private_file, function (exists) {
if (exists) {
//私钥签名
var pem = fs.readFileSync(private_file, 'utf8')
var key = new NodeRSA(pem)
const sign = key.sign("hello", 'base64', 'utf8');
console.log('私钥签名:', sign);
//公钥验签
fs.exists(public_file, function (exists) {
if (exists) {
var pem = fs.readFileSync(public_file, 'utf8')
var key = new NodeRSA(pem)
const verify = key.verify("hello2", sign, 'utf8', 'base64');
console.log('公钥验签:', verify);
}
})
}
})
如果大家对非对称加密感兴趣,欢迎加我微信: jin-jiu-lian