vue前端开发会需要用到数据加密,本文以sha256非对称加密为例,本人场景用于基于fabric网络系统业务开发钱包注册以及账户交易时私钥加密等。
安装jsrsasign
cnpm install jsrsasign
jsrsasign的API文档
https://kjur.github.io/jsrsasign/api/symbols/KEYUTIL.html#.generateKeypair
注册
import jsrsasign from 'jsrsasign'
Vue.prototype.RSA = jsrsasign;
获取密钥对,pem格式的公、私钥以及十六进制私钥。API中未找到十六进制的公钥,但不影响使用
let key = this.RSA.KEYUTIL.generateKeypair('RSA', 1024)
let pubKeyPEM = this.RSA.KEYUTIL.getPEM(key.pubKeyObj)
let prvKeyPEM = this.RSA.KEYUTIL.getPEM(key.prvKeyObj, "PKCS5PRV", "password")
let prvKeyHEX = this.RSA.KEYUTIL.getDecryptedKeyHex(prvKeyPEM, "password")
this.prvKeyPEM = prvKeyPEM
this.pubKeyPEM = pubKeyPEM
this.prvKeyHEX = prvKeyHEX
生成钱包地址,我使用的是对公钥进行hash160加密然后做一次base64加密,可以根据自己需要修改加密规则,也可以仿照一下bitcoin的生成流程。
安装base64、ripemd160、sha256
cnpm install js-sha256
cnpm install crypto-js/ripemd160
cnpm install js-base64
crypto-js有多种加密算法,有兴趣的可以了解一下。
let sha256 = require("js-sha256").sha256
let ripemd160 = require("crypto-js/ripemd160")
let base64 = require("js-base64").Base64
let sha256PubKey = sha256(pubKeyPEM)
let hash160PubKey = ripemd160(sha256PubKey)
let purseID = base64.encode(hash160PubKey)
let purseIDHex = strToHexCharCode(purseID)
这里的strToHexCharCode()函数是我自己定义的字符串转十六进制。
对数据进行签名
let signature = new this.RSA.KJUR.crypto.Signature({"alg":"SHA256withRSA"})
let sig = new this.RSA.RSAKey()
sig.readPKCS5PrvKeyHex(prvKeyHEX)
signature.init(sig);
signature.updateString(signData); //signData是待加密数据
let signsig = signature.sign() //signsig是最后加密完的数据