首页 > 编程语言 >JavaScript加密:常见加密种类、优缺点和代码示例

JavaScript加密:常见加密种类、优缺点和代码示例

时间:2023-07-10 18:32:00浏览次数:61  
标签:encryptedText const 示例 JavaScript crypto key 加密 加密算法

当涉及到 JavaScript 加密时,有多种加密算法和技术可供选择。下面我将列举一些常见的加密种类、它们的优缺点,并提供一些代码案例作为参考。

  1. 对称加密算法: 对称加密算法使用相同的密钥进行加密和解密。常见的对称加密算法包括 AES(Advanced Encryption Standard)和 DES(Data Encryption Standard)。
  • 优点:对称加密算法速度快、加密解密过程简单。
  • 缺点:密钥的分发和管理相对困难。

示例代码(使用 Node.js 的 Crypto 模块)

const crypto = require('crypto');

// 加密
function encryptSymmetric(text, key) {
  const cipher = crypto.createCipher('aes-256-cbc', key);
  let encrypted = cipher.update(text, 'utf8', 'hex');
  encrypted += cipher.final('hex');
  return encrypted;
}

// 解密
function decryptSymmetric(encryptedText, key) {
  const decipher = crypto.createDecipher('aes-256-cbc', key);
  let decrypted = decipher.update(encryptedText, 'hex', 'utf8');
  decrypted += decipher.final('utf8');
  return decrypted;
}

const plaintext = 'Hello, world!';
const key = 'a1b2c3d4e5f6g7h8'; // 密钥
const encryptedText = encryptSymmetric(plaintext, key);
const decryptedText = decryptSymmetric(encryptedText, key);

console.log('加密后:', encryptedText);
console.log('解密后:', decryptedText);
  1. 非对称加密算法: 非对称加密算法使用公钥和私钥进行加密和解密。常见的非对称加密算法包括 RSA(Rivest-Shamir-Adleman)和 ECC(Elliptic Curve Cryptography)。
  • 优点:密钥的分发和管理相对简单,更安全。
  • 缺点:加密和解密的速度相对较慢。

示例代码(使用 Node.js 的 Crypto 模块和 OpenSSL):

const crypto = require('crypto');
const fs = require('fs');

// 生成密钥对
function generateKeyPair() {
  const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
    modulusLength: 2048,
  });
  fs.writeFileSync('publicKey.pem', publicKey);
  fs.writeFileSync('privateKey.pem', privateKey);
}

// 加密
function encryptAsymmetric(text, publicKeyPath) {
  const publicKey = fs.readFileSync(publicKeyPath, 'utf8');
  const encryptedBuffer = crypto.publicEncrypt(publicKey, Buffer.from(text));
  return encryptedBuffer.toString('base64');
}

// 解密
function decryptAsymmetric(encryptedText, privateKeyPath) {
  const privateKey = fs.readFileSync(privateKeyPath, 'utf8');
  const decryptedBuffer = crypto.privateDecrypt(
    {
      key: privateKey,
      passphrase: '', // 如果有密码,填写密码
    },
    Buffer.from(encryptedText, 'base64')
  );
  return decryptedBuffer.toString('utf8');
}

const plaintext = 'Hello, world!';

// 生成密钥对
generateKeyPair();

// 加密
const encryptedText = encryptAsymmetric(plaintext, 'publicKey.pem');

// 解密
const decryptedText = decryptAsymmetric(encryptedText, 'privateKey.pem');

console.log('加密后:', encryptedText);
console.log('解密后:', decryptedText);
  1. 哈希算法: 哈希算法将输入数据转换为固定长度的散列值。常见的哈希算法包括 MD5、SHA-1、SHA-256。
  • 优点:哈希算法是单向的,散列值难以逆向计算得到原始数据。
  • 缺点:由于哈希算法是固定长度的,可能会存在散列冲突。

示例代码(使用 Node.js 的 Crypto 模块):

const crypto = require('crypto');

// 哈希
function hash(data) {
  const hash = crypto.createHash('sha256');
  hash.update(data);
  return hash.digest('hex');
}

const data = 'Hello, world!';
const hashedData = hash(data);

console.log('哈希值:', hashedData);

这些只是一些常见的加密算法和技术,JavaScript 还有其他加密库和工具可以用于更高级的加密需求。请根据您的具体需求选择最适合的加密方式。

JavaScript加密:常见加密种类、优缺点和代码示例_JS加密

标签:encryptedText,const,示例,JavaScript,crypto,key,加密,加密算法
From: https://blog.51cto.com/u_15785573/6679378

相关文章

  • api接口技术开发分享,亚马逊国际获得AMAZON商品详情数据采集商品规格信息列表示例说明
    ​ 亚马逊商品详情API接口的作用是提供对亚马逊平台上商品的详细信息进行访问和操作的功能。通过调用该API接口,开发者可以获取亚马逊商品的标题、描述、价格、库存、销量、评价、图片等信息,并且可以对商品进行购买、加入购物车、添加评论等操作。这个API接口可以用于构建电商平......
  • C# JObject.Add方法代码示例
    本文整理汇总了C#中Newtonsoft.Json.Linq.JObject.Add方法的典型用法代码示例。如果您正苦于以下问题:C#JObject.Add方法的具体用法?C#JObject.Add怎么用?C#JObject.Add使用的例子?那么恭喜您,这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类Newtons......
  • 使用加密算法时报错:ModuleNotFoundError: No module named ‘Crypto‘
    解决办法:安装Crypto模块,执行 pipinstallCrypto ,安装成功后,再执行命令,还是报上面的错误第一步:在python3(或者python虚拟环境)目录下的/Lib/site-packages/目录下找到crypto、crypto-1.4.1.dist-info目录,将crypto首字母改为大写,即修改名称为Crypto、Crypto-1.4.1.d......
  • JavaScript|对象
    1类和对象1)对象的概念对象:一个具体的实体在现实世界中,对象随处可见,一个人,一个学生,一个杯子,一辆汽车,游戏里的一个英雄...都是一个对象2)对象的组成如何描述一个对象呢比如,每个人都有姓名,年龄,性别这些特征.游戏里的英雄都有生命值,攻击力,防御......
  • JavaScript|流程控制
    一.概念流程控制就是来控制代码按照一定结构顺序来执行主要有3种结构顺序条件循环二.顺序顺序结构是程序中最简单、最基本的流程控制,它没有特定的语法结构,程序会按照代码的先后顺序,依次执行,程序中大多数的代码都是这样执行的。三.条件根据不同的条件,执行不同的路径......
  • Mac中使用命令行来加密压缩zip文档
    背景最近需要对一些文件加密,但是Mac上没有找到相应的加密工具,macOS中创建密码保护的压缩zip文件很容易并且不需要任何额外附加物或下载。使用命令行的方式处理即可。对压缩包加密之后便意味着有人想要解压缩zip文件时,必须输入正确的密码才能取出归档文件。命令压缩文件时带入......
  • 请求参数加密与返回结果加密
    在开发接口的过程中,难免会遇到隐私数据的传输,如账号密码、支付密码等。以明文的方式传输这些信息,会有泄露给别人的风险,这是就需要加密传输我们要首先选择加密算法加密算法分为三种:对称加密对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加......
  • 如何自动(定时/间隔/重复)执行 同步文件、备份打包加密压缩文件
    参考下列两个教程结合使用即可:快捷自由定时重启、注销、关机如何从多个文件夹内转移全部文件(忽略文件夹的结构)(进行复制)(再打包)就是先设定好勾选对'来源路径’Zip打包,并且勾选备份模式备份模式下,就会先对要复制的文件(夹)先打包,然后可以再对包重命名,再复制到指定的位置中去保......
  • MD5加密介绍
      MD5的全称是Message-DigestAlgorithm5,Message-Digest泛指字节串(Message)的Hash变换,就是把一个任意长度的字节串变换成一定长的大整数。MD5将任意长度的"字节串"变换成一个128bit的大整数,并且它是一个不可逆的字符串变换算法,换句话说就是,即使你看到源程序和算法描述,也无法......
  • JavaScript 模块
    JavaScript模块 一般来讲,模块是一个独立的JavaScript文件 模块文件可以包含一个类定义、一组相关的类、一个实用函数库或者是一些待执行的代码 以模块的形式编写代码,任何符合模块编码形式JavaScript代码段,都可当做一个模块JavaScript中未定义支持模块的语言结构,所以......