區塊鏈加密技術

base64
來源:要求把三個八位字節 24位轉化 4 個6位 24位 ,補齊八位變成32位
的形式。
若是不足三個字節:用=補齊算法

Base64編碼表
爲保證可讀碼錶的容量是64個,所以被稱爲base64。
//加密解密類數組

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

/**ui

  • 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;
    }

/**3d

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

    //獲得私鑰
    var publicPem = fs.readFileSync(path.join(__dirname, "../../properties/rsa_public_key.pem"));//替換你本身的路徑
    var publicKey = publicPem.toString();
    //通過base64編碼的密文轉成buf
    var buf = new Buffer(date, "base64");utf-8

    //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;
    }input

/**

  • 私鑰加密
  • @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

相關文章
相關標籤/搜索