区块链加密技术

base64
来源:要求把三个八位字节 24位转化 4 个6位 24位 ,补齐八位变成32位
的形式。
如果不足三个字节:用=补齐

Base64编码表
为保证可读码表的容量是64个,因此被称为base64。
//加密解密类

var crypto = require('crypto');
var fs = require('fs');
var path = require('path');

/**

  • RSA最大加密明文大小
    */
    var MAX_ENCRYPT_BLOCK = 117-31;

/**

  • RSA最大解密密文大小
    */
    var MAX_DECRYPT_BLOCK = 128;

/**

  • 公钥加密
  • @param data
  • @returns {string}
    */
    function publicEncrypt(data) {
    //得到公钥
    var publicPem = fs.readFileSync(path.join(__dirname, "../../properties/rsa_public_key.pem"));//替换你自己的路径
    var publicKey = publicPem.toString();
    //加密信息用buf封装
    var buf = new Buffer(data, "utf-8");
    //buf转byte数组
    var inputLen = buf.byteLength;
    //密文
    var bufs = [];
    //开始长度
    var offSet = 0;
    //结束长度
    var endOffSet = MAX_ENCRYPT_BLOCK;
    //分段加密
    while (inputLen - offSet > 0) {
    if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
    var bufTmp = buf.slice(offSet, endOffSet);
    bufs.push(crypto.publicEncrypt({key: publicKey, padding: crypto.RSA_PKCS1_PADDING}, bufTmp));
    } else {
    var bufTmp = buf.slice(offSet, inputLen);
    bufs.push(crypto.publicEncrypt({key: publicKey, padding: crypto.RSA_PKCS1_PADDING}, bufTmp));
    }
    offSet += MAX_ENCRYPT_BLOCK;
    endOffSet += MAX_ENCRYPT_BLOCK;
    }
    var result = Buffer.concat(bufs);
    //密文BASE64编码
    var base64Str = result.toString("base64");
    console.log(base64Str);
    return base64Str;
    }

/**

  • 公钥解密
  • @param date
  • @returns {string}
    */
    function publicDecrypt(date) {

    //得到私钥
    var publicPem = fs.readFileSync(path.join(__dirname, "../../properties/rsa_public_key.pem"));//替换你自己的路径
    var publicKey = publicPem.toString();
    //经过base64编码的密文转成buf
    var buf = new Buffer(date, "base64");

    //buf转byte数组
    //var inputLen = bytes(buf, "base64");
    var inputLen = buf.byteLength;
    //密文
    var bufs = [];
    //开始长度
    var offSet = 0;
    //结束长度
    var endOffSet = MAX_DECRYPT_BLOCK;
    //分段加密
    while (inputLen - offSet > 0) {
    if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
    var bufTmp = buf.slice(offSet, endOffSet);
    bufs.push(crypto.publicDecrypt({key: publicKey, padding: crypto.RSA_PKCS1_PADDING}, bufTmp));
    } else {
    var bufTmp = buf.slice(offSet, inputLen);
    bufs.push(crypto.publicDecrypt({key: publicKey, padding: crypto.RSA_PKCS1_PADDING}, bufTmp));
    }
    offSet += MAX_DECRYPT_BLOCK;
    endOffSet += MAX_DECRYPT_BLOCK;
    }
    var result = Buffer.concat(bufs).toString();
    console.log(result);
    return result;
    }

/**

  • 私钥加密
  • @param date
  • @returns {string}
    */
    function privateEncrypt(date) {

    //得到私钥
    var privatePem = fs.readFileSync(path.join(__dirname, "../../properties/rsa_private_key.pem"));
    var privateKey = privatePem.toString();
    //经过base64编码的密文转成buf
    var buf = new Buffer(date, "utf-8");
    //buf转byte数组
    var inputLen = buf.byteLength;
    //密文
    var bufs = [];
    //开始长度
    var offSet = 0;
    //结束长度
    var endOffSet = MAX_ENCRYPT_BLOCK;
    //分段加密
    while (inputLen - offSet > 0) {
    if (inputLen - offSet > MAX_ENCRYPT_BLOCK) {
    var bufTmp = buf.slice(offSet, endOffSet);
    bufs.push(crypto.privateEncrypt({key: privateKey, padding: crypto.RSA_PKCS1_PADDING}, bufTmp));
    } else {
    var bufTmp = buf.slice(offSet, inputLen);
    bufs.push(crypto.privateEncrypt({key: privateKey, padding: crypto.RSA_PKCS1_PADDING}, bufTmp));
    }
    offSet += MAX_ENCRYPT_BLOCK;
    endOffSet += MAX_ENCRYPT_BLOCK;
    }
    var result = Buffer.concat(bufs);
    //密文BASE64编码
    var base64Str = result.toString("base64");
    console.log(base64Str);
    return base64Str;
    }

/**

  • 私钥解密
  • @param date
  • @returns {string}
    */
    function privateDecrypt(date) {

    //得到私钥
    var privatePem = fs.readFileSync(path.join(__dirname, "../../properties/rsa_private_key.pem"));
    var privateKey = privatePem.toString();
    //经过base64编码的密文转成buf
    var buf = new Buffer(date, "base64");

    //buf转byte数组
    //var inputLen = bytes(buf, "base64");
    var inputLen = buf.byteLength;
    //密文
    var bufs = [];
    //开始长度
    var offSet = 0;
    //结束长度
    var endOffSet = MAX_DECRYPT_BLOCK;
    //分段加密
    while (inputLen - offSet > 0) {
    if (inputLen - offSet > MAX_DECRYPT_BLOCK) {
    var bufTmp = buf.slice(offSet, endOffSet);
    bufs.push(crypto.privateDecrypt({key: privateKey, padding: crypto.RSA_PKCS1_PADDING}, bufTmp));
    } else {
    var bufTmp = buf.slice(offSet, inputLen);
    bufs.push(crypto.privateDecrypt({key: privateKey, padding: crypto.RSA_PKCS1_PADDING}, bufTmp));
    }
    offSet += MAX_DECRYPT_BLOCK;
    endOffSet += MAX_DECRYPT_BLOCK;
    }
    var result = Buffer.concat(bufs).toString();
    console.log(result);
    //解密
    return result;
    }

module.exports.publicEncrypt = publicEncrypt;
module.exports.publicDecrypt = publicDecrypt;
module.exports.privateEncrypt = privateEncrypt;
module.exports.privateDecrypt = privateDecrypt;

var str = cryptoUtil.publicEncrypt("123456789");//公钥加密
var deStr = cryptoUtil.privateDecrypt(str);//私钥解密

对称加密
对称加密算法 加密解密同一个 1975年之前使用。
非对称加密 使用公钥和私钥 转账信息 。
散列算法 消息摘要的方式 对于不同长度的输入消息 输出长度成为原消息的散列 不能用来加密 因为是不可逆的。

常用的对称加密:des 3des aes(射频设备使用)
非对称加密:rsa dsa ecc更安全
散列:md5 sha1 hmac
其他算法:
Base64
https

转载于:https://www.cnblogs.com/xiaocongcong888/p/10253908.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值