crypto

crypto

crypto包含了加解密相关的api

crypto

函数类型参数返回值说明
md5方法value:anyBuffermd5加密
sha256方法value:anyBuffersha256加密
sha1方法value:anyBuffersha1加密
sha512方法value:anyBuffersha512加密
hmac方法hash:string,key:Buffer|string,data:Buffer|stringBufferhmac加密
uuid方法string随机生成uuid
ulid方法string随机生成ulid
nanoid方法string随机生成nanoid
snowflake方法id?:intstring生成snowflakeId
aes属性AESaes加/解密
des属性DESdes解/密
rsa属性rsarsa对象
pem属性pempem对象
x509属性x509x509对象

md5

语法

crypto.md5(value:any);

参数

  • value: 待加密的数据

返回值

  • Buffer :加密后的数据

示例

import {crypto} from 'core';
//打印:65a8e27d8879283831b664bd8b7f0ad4   
//字节数组的16进制字符串表示
console.log(crypto.md5("Hello, World!").toString("hex"))

sha256

语法

crypto.sha256(value:any);

参数

  • value: 待加密的数据

返回值

  • Buffer :加密后的数据
import {crypto} from 'core';
//打印:dffd6021bb2bd5b0af676290809ec3a53191dd81c7f70a4b28688a362182986f
console.log(crypto.sha256("Hello, World!").toString("hex"))

sha1

语法

crypto.sha1(value:any);

参数

  • value: 待加密的数据

返回值

  • Buffer :加密后的数据
import {crypto} from 'core';
//打印:0a0a9f2a6772942557ab5355d76af442f8f65e01
console.log(crypto.sha1("Hello, World!").toString("hex"))

sha512

语法

crypto.sha512(value:any);

参数

  • value: 待加密的数据

返回值

  • Buffer :加密后的数据
import {crypto} from 'core';
//打印:374d794a95cdcfd8b35993185fef9ba368f160d8daf432d08ba9f1ed1e5abe6cc69291e0fa2fe0006a52570ef18c19def4e617c33ce52ef0a6e5fbe318cb0387
console.log(crypto.sha512("Hello, World!").toString("hex"))

hmac

HMAC (Hash-based Message Authentication Code) 是一种基于散列函数的消息认证码,用于验证消息的完整性和真实性。HMAC 的核心思想是通过一个加密的密钥和一个标准的哈希函数(如 SHA-256 或 MD5)共同生成一个唯一的签名,从而确保消息在传输过程中没有被篡改

语法

crypto.hmac(hash:string,key:Buffer|string,data:Buffer|string);

参数

  • hash: hash算法,支持:md5、sha1、sha256、sha512
  • key: 密钥
  • data:待加密的数据

返回值

  • Buffer :加密后的数据
import {crypto} from 'core';
console.log(crypto.hmac("sha256","key","value"))

uuid

示例

import {crypto} from 'core';
//打印:e91224c4-4ab3-4136-86de-d0ffb7ba4825
console.log(crypto.uuid())

ulid

示例

import {crypto} from 'core';
//打印:01J2Z469YGS8WJJQ4C1N7SPAPA
console.log(crypto.ulid())

nanoid

示例

import {crypto} from 'core';
//打印:7sPFPNtDrWyVzbjx_vwsj
console.log(crypto.nanoid())

snowflake

用于生成雪花id,雪花算法是一种用于生成唯一ID的算法,特别适用于分布式系统.

语法

crypto.snowflake(id?:int)

参数

  • id:(可选) 节点ID(必须为整数),默认值:0

节点ID代表了一个服务实例或机器,每个节点都有一个唯一的ID(整数)。这个节点ID用于在分布式系统中区分不同的节点,从而确保生成的ID全局唯一。

示例

import {crypto} from 'core';
//打印: 71772347496927232
console.log(crypto.snowflake());

aes

获取aes加/解密对象

示例

import {crypto} from 'core';
//返回AES对象
let aes = crypto.aes

des

获取des加/解密对象

示例

import {crypto} from 'core';
//返回DES对象
let des = crypto.des

AES/DES

AES/DES的对象属性和方法相同,是一个对称加解密对象

属性与方法

函数类型参数返回值说明
encrypt方法config:objectBuffer加密
decrypt方法config:objectBuffer解密

语法

//des加密
crypto.des.encrypt(config:object)
//des解密
crypto.des.decrypt(config:object)
//aes加密
crypto.aes.encrypt(config:object)
//aes解密
crypto.aes.decrypt(config:object)

参数

config对象属性如下:

  • data:any 原始数据
  • key:string 密钥
  • mode:string (可选) 加密模式:ecb、cbc、ctr、ofb、cfb,默认:ecb。不区分大小写
  • pading:string (可选) 填充模式:pkcs5、pkcs7、iso10126、none、zero,默认:none。不区分大小写
  • iv:string (可选) 偏移量. ecb模式下不需要该参数,其他模式是必选参数

注意事项

data类型可以是任何类型,但是vino会将任何类型转换为Buffer字节数组后再进行加解密。

示例(aes 加密)

import {crypto} from 'core';
let config={
    data:"aaaaa",//待加密的数据
    key:"aaaabbbbccccdddd",//密钥
    mode:"ECB",//(可选) 加密模式:ecb、cbc、ctr、ofb、cfb,默认:ecb。不区分大小写
    padding:"PKCS7",//(可选) 填充模式:pkcs5、pkcs7、iso10126、none、zero,默认:none。不区分大小写
}
//打印:sLxU+QDxdx78QJs+zPh9PQ==
console.log(crypto.aes.encrypt(config).toString("base64"));

示例(aes 解密)

import {crypto} from 'core';
//密文的base64字符串
let str="sLxU+QDxdx78QJs+zPh9PQ=="
//解密时需要将base64字符串转为Buffer字节数组,如果不转换,则默认会将字符串按照utf8编码进行转换
let data = str.toBuffer("base64")
let config2={
    data:data,//待解密的数据
    key:"aaaabbbbccccdddd",//密钥
    mode:"ECB",//(可选) 加密模式:ecb、cbc、ctr、ofb、cfb,默认:ecb。不区分大小写
    padding:"PKCS7",//(可选) 填充模式:pkcs5、pkcs7、iso10126、none、zero,默认:none。不区分大小写
}
//打印:aaaaa
console.log(crypto.aes.decrypt(config2).toString());

示例(des 加密)

import {crypto} from 'core';
let config={
    data:"Hello, vino!",//待加密的数据
    key:"12345678",//密钥
    mode:"CBC",//(可选) 加密模式:ecb、cbc、ctr、ofb、cfb,默认:ecb。不区分大小写
    padding:"PKCS7",//(可选) 填充模式:pkcs5、pkcs7、iso10126、none、zero,默认:none。不区分大小写
    iv:"12345678"
}
//打印:bYoPcR6V0Ps1BzJ5TTcr1Q==
console.log(crypto.des.encrypt(config).toString("base64"));

示例(des 解密)

import {crypto} from 'core';
let config={
    data:"bYoPcR6V0Ps1BzJ5TTcr1Q==".toBuffer("base64"),//待加密的数据
    key:"12345678",//密钥
    mode:"CBC",//(可选) 加密模式:ecb、cbc、ctr、ofb、cfb,默认:ecb。不区分大小写
    padding:"PKCS7",//(可选) 填充模式:pkcs5、pkcs7、iso10126、none、zero,默认:none。不区分大小写
    iv:"12345678"
}
//打印:Hello, vino!
console.log(crypto.des.decrypt(config).toString());

rsa

生成一对 RSA 密钥(公钥和私钥)

函数类型参数返回值说明
generateKey方法bits:intobject生成密钥对
encrypt方法key:PublicKey,message:BufferBuffer使用公钥对数据进行加密
decrypt方法key:PrivateKey,ciphertext:BufferBuffer使用私钥对数据进行解密
sign方法key:PrivateKey,message:Buffer,hash:stringBuffer使用私钥对数据进行签名
verify方法key:PublicKey,message:Buffer,hashed:Buffer,hash:stringboolean使用公钥对签名进行验证

generateKey

生成密钥对

import {crypto} from "core";
//创建长度2048字节的密钥对
let key = crypto.rsa.generatekey(2048)
//获取公钥对象
let publicKey = key.publicKey
//获取私钥对象
let privateKey = key.privateKey

encrypt

加密

import {crypto} from "core";
//创建长度2048字节的密钥对
let key = crypto.rsa.generatekey(2048)
//使用公钥加密
let m1 = crypto.rsa.encrypt(key.publicKey,"Hello, World!")

decrypt

解密

import {crypto} from "core";
//创建长度2048字节的密钥对
let key = crypto.rsa.generatekey(2048)
//使用公钥加密
let m1 = crypto.rsa.encrypt(key.publicKey,"Hello, World!")
//使用私钥解密
let m2 = crypto.rsa.decrypt(key.privateKey,m1)
//打印:Hello, World!
console.log(m2.toString())

sign

签名

import {crypto} from "core";
//创建长度2048字节的密钥对
let key = crypto.rsa.generatekey(2048)
//使用私钥进行签名
let sign = crypto.rsa.sign(key.privateKey,"Hello, World!","sha256")
//打印签名的base64字符串
console.log(sign.toBase64())

verify

验证签名

import {crypto} from "core";
//创建长度2048字节的密钥对
let key = crypto.rsa.generatekey(2048)
//使用私钥进行签名
let sign = crypto.rsa.sign(key.privateKey,"Hello, World!","sha256")
//用公钥对数据和签名进行验证
let verify = crypto.rsa.verify(key.publicKey,"Hello, World!",sign,"sha256")
//true,验证成功
console.log(verify)

x509

x509 是一个标准的公钥基础设施(PKI)协议,它定义了公钥证书的格式和各种操作,例如证书生成、签名、验证、序列化和反序列化。x509 是在 ITU-T X.509 标准中定义的,并且被广泛应用于 SSL/TLS、HTTPS 等安全通信中。

函数类型参数返回值说明
marshalPKCS1PrivateKey方法data:PrivateKeyBuffer将 RSA 私钥序列化为 PKCS#1 格式的 DER 编码
marshalPKCS1PublicKey方法data:PublicKeyBuffer将 RSA 公钥序列化为 PKCS#1 格式的 DER 编码
parsePKCS1PrivateKey方法data:BufferPrivateKey解析 PKCS#1 格式的 DER 编码 RSA 私钥
parsePKCS1PublicKey方法data:BufferPublicKey解析 PKCS#1 格式的 DER 编码 RSA 公钥

1. marshalPKCS1PrivateKey

将 RSA 私钥序列化为 PKCS#1 格式的 DER 编码

import {crypto} from "core";
let rsa = crypto.rsa(2048)
let buffer = crypto.x509.marshalPKCS1PrivateKey(rsa.privateKey)

2. marshalPKCS1PublicKey

将 RSA 公钥序列化为 PKCS#1 格式的 DER 编码

import {crypto} from "core";
let key = crypto.rsa.generatekey(2048)
let buffer = crypto.x509.marshalPKCS1PublicKey(key.publicKey)

3. parsePKCS1PrivateKey

解析 PKCS#1 格式的 DER 编码 RSA 私钥

import {crypto} from "core";
let key = crypto.rsa.generatekey(2048)
//将私钥对象序列化为buffer对象
let buffer = crypto.x509.marshalPKCS1PrivateKey(key.privateKey)
//将buffer对象反序列化为私钥对象
let privateKey = crypto.x509.parsePKCS1PrivateKey(buffer)

4. parsePKCS1PublicKey

解析 PKCS#1 格式的 DER 编码 RSA 公钥

import {crypto} from "core";
let key = crypto.rsa.generatekey(2048)
//将公钥对象序列化为buffer对象
let buffer = crypto.x509.marshalPKCS1PublicKey(key.publicKey)
//将buffer对象反序列化为公钥对象
let publicKey = crypto.x509.parsePKCS1PublicKey(buffer)

pem

pem格式化

将数据转换为pem格式

import {crypto} from "core";
let key = crypto.rsa.generatekey(2048)
let buffer = crypto.x509.marshalPKCS1PublicKey(key.publicKey)
let config = {
    type:"RSA PUBLIC KEY", //类型名称
    body:buffer, //公钥数据
}
//返回pem格式的buffer对象
let pemBuffer = crypto.pem.encode(config)
//打印pem格式的文本内容
console.log(pemBuffer.toString())

//将pem格式的buffer对象转换为pem格式的对象
let pem = crypto.pem.decode(pemBuffer)
console.log(pem.type)
console.log(pem.body.toString())
console.log(pem.headers)
更新时间 10/12/2024, 2:37:19 PM