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