当前位置: 首页> 汽车> 报价 > 天津建站模板搭建_企业年金退休后是一次性领取还是按月领取_发布软文广告_产品网络营销分析

天津建站模板搭建_企业年金退休后是一次性领取还是按月领取_发布软文广告_产品网络营销分析

时间:2025/8/23 21:34:22来源:https://blog.csdn.net/qq_39706570/article/details/147314238 浏览次数: 0次
天津建站模板搭建_企业年金退休后是一次性领取还是按月领取_发布软文广告_产品网络营销分析

目录

目标

环境

实现RSA加解密

计算RSA加密允许的最大字节长度


目标

  1. 使用JS实现RSA加密解密。
  2. 计算RSA加密允许的最大字节长度。

环境

        node-rsa


实现RSA加解密

const NodeRSA = require('node-rsa');function getKey() {const keyLength=512// 创建 RSA 密钥对const key = new NodeRSA({b: keyLength}); // 512位密钥长度(你可以根据需要增加位数)const publicKey = key.exportKey('public');const privateKey = key.exportKey('private');return {"publicKey": publicKey,"privateKey": privateKey};
}/*** 加密函数* @param plaintext 明文* @param publicKey 公钥* @returns {string|Buffer} 加密后的数据(Base64 编码)*/
function encrypt(plaintext, publicKey) {const key = new NodeRSA(publicKey);// 使用 PKCS#1 v1.5 填充加密,并返回 Base64 编码return key.encrypt(plaintext, 'base64', {encryptionScheme: 'pkcs1'});
}/*** 解密函数* @param encryptedData 密文* @param privateKey 私钥* @returns {string} 解密后的明文*/
function decrypt(encryptedData, privateKey) {const key = new NodeRSA(privateKey);// 使用 PKCS#1 v1.5 填充解密return key.decrypt(encryptedData, 'utf8', {encryptionScheme: 'pkcs1'});
}// 获取公钥和私钥
const keyObject = getKey();// 输出公钥和私钥
console.log("公钥:\n", keyObject.publicKey);
console.log("私钥:\n", keyObject.privateKey);// 要加密的明文
const plaintext = "hello world! 你好";// 加密
const encryptData = encrypt(plaintext, keyObject.publicKey);
console.log("加密结果:", encryptData);// 解密
const decryptData = decrypt(encryptData, keyObject.privateKey);
console.log("解密结果:", decryptData);

计算RSA加密允许的最大字节长度

function getMaxEncryptableBytes(keyLength, paddingType) {// 将密钥长度从位转换为字节,就是除以8。const keyLengthInBytes = keyLength >> 3;// 根据填充类型决定填充长度let paddingLength = 0;switch (paddingType.toUpperCase()) {case 'PKCS1':paddingLength = 11; // PKCS#1 v1.5 填充break;case 'OAEP':paddingLength = 42; // OAEP 填充break;case 'PSS':paddingLength = 42; // PSS 填充(假设)break;case 'NONE':paddingLength = 0;  // 无填充break;default:throw new Error('未知的填充类型');}// 计算最大可加密字节数return keyLengthInBytes - paddingLength;
}console.log(getMaxEncryptableBytes(512,"PKCS1"))
关键字:天津建站模板搭建_企业年金退休后是一次性领取还是按月领取_发布软文广告_产品网络营销分析

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

责任编辑: