Private
_rsadPrivate
_rsaePrivate
_sm3Private
_sm4e对数据进行 RSA 解密。
该方法接受一个参数 data,表示要解密的数据。在方法实现中,调用 _rsad 私有属性中 RSA 解密算法实例的 decrypt() 方法,对输入的数据进行解密操作,并返回解密后的结果。
需要注意的是,在使用该方法之前,必须先设置 RSA 解密算法的私钥,否则会导致解密失败。
const rsaEncrypt = new RSAEncrypt()
const privateKey =
'-----BEGIN PRIVATE KEY-----\n' +
'MIIEvAIBADANBgkqhkiG9\n' +
'w0BAQEFAASCBKYwggSiAgEAAoIBAQDajZ4pqCefYk17\n' +
'jhX2N6S/SGHbg3UOc1Qf+iz5bpGq1Tn0BZHk\n' +
'yUeKLV+odmW01tjRvhbNd8x5CiJg\n' +
'+iFbPzKJ7rcSA5+NlW0ysoOGr/JRof9brGpEmluFSeMAaj0T1lM5I9\n' +
'ECggEAeQE8q4tgLR8J3gUBZ5q2zx8AMmvZEKrDVkTd8vIzdBWD\n' +
'zLlv26Fgr0fk/HgDd8M4gclRpa1PMz2j1YdvDmnPNvldnwM+xDyv59UtcOat8k0J\n' +
'n62MqScdEAScF6IbxlnVL+76+RnoW21+V5zOXqmR+cL1Dd6T2LrafYNi5z0BBnI8\n' +
'MyY43M7NU5VAnj6J3wuZMbVQ1Jl+VJ4U1rByXPyKwv0\n' +
'-----END PRIVATE KEY-----'
rsaEncrypt.setRSAPrivateKey(privateKey)
const publicKey =
'-----BEGIN PUBLIC KEY-----\n' +
'MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQB2JBF6L3r1mX8xqJzNcdtV\n' +
'aH7dWSlS5jwWlA/7UjgQ7fYWBNOZ3IdAbLW8D3v3Z8bFGxqOxM+mP9ykAl3wnuDK\n' +
'cX9OIRHgQSGqGa/3F6+Ih/SwCTeJLkLjEhd\n' +
'wRPudC0Uhn0FEpGo0uTFyXdiVa+\n' +
'gB+5dOwZVfXF7hku0P2xT3NpUvGvf1/ah+KL5zE4Wz9lpLwKdKiGJOGQyNlG8Xbf\n' +
'AgMBAAE=\n' +
'-----END PUBLIC KEY-----'
rsaEncrypt.setRSApublicKey(publicKey)
要解密的数据。
返回解密后的数据。
对数据进行 RSA 加密。
该方法接受一个参数 data,表示要加密的数据。在方法实现中,调用 _rsae 私有属性中 RSA 加密算法实例的 encrypt() 方法,对输入的数据进行加密操作,并返回加密后的结果。
需要注意的是,在使用该方法之前,必须先设置 RSA 加密算法的公钥,否则会导致加密失败。
const rsaEncrypt = new RSAEncrypt()
const publicKey =
'-----BEGIN PUBLIC KEY-----\n' +
'MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQB2JBF6L3r1mX8xqJzNcdtV\n' +
'aH7dWSlS5jwWlA/7UjgQ7fYWBNOZ3IdAbLW8D3v3Z8bFGxqOxM+mP9ykAl3wnuDK\n' +
'cX9OIRHgQSGqGa/3F6+Ih/SwCTeJLkLjEhdhWwRPudC0Uhn0FEpGo0uTFyXdiVa+\n' +
'gB+5dOwZVfXF7hku0P2xT3NpUvGvf1/ah+KL5zE4Wz9lpLwKdKiGJOGQyNlG8Xbf\n' +
'395Mu6Sro8JRa9U8DqqLq74JbJeXH9JrRtXvQkOyotcA2kUSABY+N75cRPvhpday\n' +
'FQvQsxjJsgJ4/DvLPmGcJ3k3r7cc1D/HWi/WjGcxzCzZuZifDxswrKrD4bkG0/Wx\n' +
'AgMBAAE=\n' +
'-----END PUBLIC KEY-----'
rsaEncrypt.setRSAPublicKey(publicKey) // 设置 RSA 加密算法的公钥
const data = 'Hello, world!'
const encryptedData = rsaEncrypt.RSAEncrypt(data) // 对数据进行 RSA 加密
console.log(encryptedData) // 输出加密后的数据
要加密的数据。
返回加密后的数据。
生成一个8位的16进制字符串,用于生成随机数。
该方法的主要作用是生成一个随机的长度为 8 的 16 进制字符串,用于在加密、解密等操作中产生随机的密钥或者向量等信息。在方法实现中,首先调用 Math.random() 方法生成一个小于 1 的随机浮点数,然后将其转换为 16 进制字符串,并使用 substr() 方法取后面的 8 位作为随机值。最后,使用 while 循环在字符串末尾补 0,使其长度达到 8。
需要注意的是,由于该方法只是使用了 Math.random() 方法生成随机数,因此返回值并不是真正的随机数,而是伪随机数。如果需要更加安全的随机数,可以考虑使用 Node.js 中提供的 crypto 模块中的相关方法进行随机数生成。
const smTool = new SMTool()
const randomStr = smTool.random() // 生成一个8位的随机字符串,该字符串仅包含16进制数字字符。
console.log(randomStr) // 输出类似于 "04f5c6a9" 的字符串。
返回一个长度为8的16进制字符串。
设置 RSA 解密算法的私钥。
该方法接受一个参数 key,表示要设置的 RSA 解密算法的私钥。在方法实现中,将输入的私钥设置为 _rsad 私有属性中 RSA 解密算法实例的私钥。
需要注意的是,在使用该方法之前,私钥必须是合法的字符串类型,且格式符合 PKCS#1 标准,否则会导致加密和解密失败。
const rsaEncrypt = new RSAEncrypt()
const privateKey =
'-----BEGIN PRIVATE KEY-----\n' +
'MIIEvAIBADANBgkqhkiG9w0BAQEFAASCBKYwggSiAgEAAoIBAQDajZ4pqCefYk17\n' +
'jhX2N6S/SGHbg3UOc1Qf+iz5bpGq1Tn0BZHkyUeKLV+odmW01tjRvhbNd8x5CiJg\n' +
'+iFbPzKJ7rcSA5+NlW0ysoOGr/JRof9brGpEmluFSeMAaj0T1lM5I9k6Iw7tT+dv\n' +
'bmj+2n6IW5DJNa5DqP4u8tIfZGyVM8fIUsaXKSgK8eSb9dJL9pxgoM1lZji7vE+x\n' +
'GUVx3s+9wWY1YvlnP3mLQ4Ryh/IngeuYkheFzT3C1WcJTeYrVyzjOZgcq6wtvo9K\n' +
'0ZyATyUCwBZhE3o0Xqa3c5i/T6Q5vLHndSDylifZaUfiyKbJfFcfwSeQ1CZwWxhN\n' +
'hXfL0ODpAgMBAAECggEAeQE8q4tgLR8J3gUBZ5q2zx8AMmvZEKrDVkTd8vIzdBWD\n' +
'ZnmW3iQ/T7rLFnGb3pk2I9QCJ0w1fJ5coj5Fe1HPlJzz7yDIwQw5cK87aak9Qscv\n' +
'zLlv26Fgr0fk/HgDd8M4gclRpa1PMz2j1YdvDmnPNvldnwM+xDyv59UtcOat8k0J\n' +
'n62MqScdEAScF6IbxlnVL+76+RnoW21+V5zOXqmR+cL1Dd6T2LrafYNi5z0BBnI8\n' +
'MyY43M7NU5VAnj6J3wuZMbVQ1Jl+VJ4U1rByXPyKwv0noMZG8bZd/0B0mZpU2/of\n' +
'tH1RtE3gvsZAV+Eh1HWdQtcHq4s+QrCkSHvyu9jfIQKBgQDzyTZv7v+8ke/EOcYy\n' +
'lSotbFrd8u03BF2cRNf1tWtFgTU5Y2xUKw6zfl2wpvL0Sm7n2CGnF9HBC5QpPvnz\n' +
'Ah9p/9b3ebTm96roIy5OhoPRlbov3PNAQZCKi4cl6ACN/XlNQt/jgkhXXq+YQYRo\n' +
'R+jKpQTAhHnFr4hoSMz8\n' +
'-----END PRIVATE KEY-----'
rsaEncrypt.setRSAPrivateKey(privateKey) // 设置 RSA 解密算法的私钥
RSA 解密算法的私钥。
设置 RSA 加密算法的公钥。
该方法接受一个参数 key,表示要设置的 RSA 加密算法的公钥。在方法实现中,将输入的公钥设置为 _rsae 私有属性中 RSA 加密算法实例的公钥。
需要注意的是,在使用该方法之前,公钥必须是合法的字符串类型,且格式符合 PKCS#1 标准,否则会导致加密和解密失败。
const rsaEncrypt = new RSAEncrypt()
const publicKey =
'-----BEGIN PUBLIC KEY-----\n' +
'MIIBITANBgkqhkiG9w0BAQEFAAOCAQ4AMIIBCQKCAQB2JBF6L3r1mX8xqJzNcdtV\n' +
'aH7dWSlS5jwWlA/7UjgQ7fYWBNOZ3IdAbLW8D3v3Z8bFGxqOxM+mP9ykAl3wnuDK\n' +
'cX9OIRHgQSGqGa/3F6+Ih/SwCTeJLkLjEhdhWwRPudC0Uhn0FEpGo0uTFyXdiVa+\n' +
'gB+5dOwZVfXF7hku0P2xT3NpUvGvf1/ah+KL5zE4Wz9lpLwKdKiGJOGQyNlG8Xbf\n' +
'395Mu6Sro8JRa9U8DqqLq74JbJeXH9JrRtXvQkOyotcA2kUSABY+N75cRPvhpday\n' +
'FQvQsxjJsgJ4/DvLPmGcJ3k3r7cc1D/HWi/WjGcxzCzZuZifDxswrKrD4bkG0/Wx\n' +
'AgMBAAE=\n' +
'-----END PUBLIC KEY-----'
rsaEncrypt.setRSAPublicKey(publicKey) // 设置 RSA 加密算法的公钥
RSA 加密算法的公钥。
设置 SM4 加密算法的密钥和向量。
该方法接受两个参数,分别是 SM4 加密算法的密钥 key 和初始向量 iv。在方法实现中,将输入的密钥和向量分别设置为 _sm4e 私有属性中 SM4 加密算法实例的 secretKey 和 iv 属性。
需要注意的是,在使用该方法之前,密钥和向量必须是合法的字符串类型,且长度均为 16 字节(128 位),否则会导致加密和解密失败。
const smTool = new SMTool()
const key = '1234567890abcdef' // 16字节(128位)密钥
const iv = 'fedcba0987654321' // 16字节(128位)初始向量
smTool.setSM4Key(key, iv) // 设置 SM4 加密算法的密钥和向量
SM4 加密算法的密钥。
SM4 加密算法的初始向量。
对给定数据进行 SM3 摘要计算。
该方法接受一个 string 或者 ArrayBuffer 类型的参数 data,表示要进行摘要计算的数据。在方法实现中,将输入数据传递给 _sm3 私有属性中的 sm3Digest() 方法,进行 SM3 摘要计算,并返回一个长度为 32 个字符的十六进制字符串作为计算结果。需要注意的是,在进行摘要计算之前,输入数据最好使用合适的编码方式转换为字节数组,避免编码问题导致的计算错误。
需要注意的是,由于 SM3 算法是不可逆的哈希函数,因此摘要值无法转换回输入数据。而且,对于不同的输入数据,其产生的摘要值也是完全不同的。在实际应用中,SM3 摘要算法广泛用于数字签名、消息认证等场景中,以保证数据的完整性和安全性。
const smTool = new SMTool()
const data = 'abc123'
const result = smTool.sm3(data) // 计算 "abc123" 的 SM3 摘要值
console.log(result) // 输出类似于 "e24fcb4d1b21f9f5cc7c8a442365c20454bb64c84a0f00dc1e8fcf73e160d40a" 的字符串。
要进行摘要计算的数据。
返回一个 string
类型的摘要结果,长度为 32 的十六进制字符串。
对字节数组进行 SM3 摘要计算。
该方法接受两个参数,分别是要进行摘要计算的字节数组 dataArr 和字节数组对应的字符串长度 strLen。在方法实现中,将输入数据传递给 _sm3 私有属性中的 sm3DigestBytes() 方法,进行 SM3 摘要计算,并返回一个长度为 32 的 Uint8Array 类型的字节数组作为计算结果。
需要注意的是,在使用该方法之前,输入的字节数组必须是按照正确的编码方式转换后的,以避免编码问题导致的计算错误。
const smTool = new SMTool()
const data = 'abc123'
const encoder = new TextEncoder()
const dataArr = encoder.encode(data) // 将 "abc123" 转换为 UTF-8 编码的字节数组
const result = smTool.sm3DigestBytes(dataArr, data.length) // 计算 "abc123" 的 SM3 摘要值
console.log(result) // 输出一个 Uint8Array 类型的字节数组,例如 Uint8Array [ 226, 79, 203, 77, 27, 33, 249, 245, 204, 124, 138, 68, 35, 97, 194, 4, 84, 187, 100, 200, 74, 15, 0, 220, 30, 143, 207, 115, 225, 96, 212, 10 ]
要进行摘要计算的字节数组。
字节数组表示的字符串长度。
返回一个 Uint8Array
类型的摘要结果,长度为 32 的字节数组。
对给定数据使用 SM4 CBC 模式进行解密。
该方法接受三个参数,分别是要进行解密的数据 data,解密算法的密钥 key 和初始向量 iv。在方法实现中,如果输入了密钥和向量,则将其传递给 setSM4Key() 方法设置到 SM4 实例中;否则,使用已经设置好的 SM4 密钥和向量进行解密操作,并返回一个 Uint8Array 类型的解密结果。
需要注意的是,在使用该方法之前,密钥和向量必须与加密时使用的密钥和向量完全一致,否则会导致解密失败。此外,在进行解密操作时,输入数据最好使用合适的编码方式转换为字节数组,避免编码问题导致的计算错误。
const smTool = new SMTool()
const data = 'abc123'
const key = '1234567890abcdef' // 16字节(128位)密钥
const iv = 'fedcba0987654321' // 16字节(128位)初始向量
const encData = smTool.sm4Encrypt(data, key, iv) // 对 "abc123" 进行 SM4 CBC 加密
const result = smTool.sm4Decrypt(encData, key, iv) // 对加密数据进行解密操作
console.log(result) // 输出一个 Uint8Array 类型的字节数组,例如 Uint8Array [ 97, 98, 99, 49, 50, 51 ]
要进行解密的数据。
Optional
key: string解密密钥。
Optional
iv: string初始向量。
返回一个 Uint8Array
类型的解密结果。
对给定数据使用 SM4 CBC 模式进行加密。
该方法接受三个参数,分别是要进行加密的数据 data,加密算法的密钥 key 和初始向量 iv。在方法实现中,如果输入了密钥和向量,则将其传递给 setSM4Key() 方法设置到 SM4 实例中;否则,使用已经设置好的 SM4 密钥和向量进行加密操作,并返回一个 Uint8Array 类型的加密结果。
需要注意的是,在使用该方法之前,密钥和向量必须是合法的字符串类型,且长度均为 16 字节(128 位),否则会导致加密和解密失败。此外,在进行加密操作时,输入数据最好使用合适的编码方式转换为字节数组,避免编码问题导致的计算错误。
const smTool = new SMTool()
const data = 'abc123'
const key = '1234567890abcdef' // 16字节(128位)密钥
const iv = 'fedcba0987654321' // 16字节(128位)初始向量
const result = smTool.sm4Encrypt(data, key, iv) // 对 "abc123" 进行 SM4 CBC 加密
console.log(result) // 输出一个 Uint8Array 类型的字节数组,例如 Uint8Array [ 177, 79, 23, 253, 96, 52, 87, 8, 32, 72, 244, 148, 83, 158, 31, 105 ]
要进行加密的数据。
Optional
key: string加密密钥。
Optional
iv: string初始向量。
返回一个 Uint8Array
类型的加密结果。
对给定数据使用随机密钥进行 SM4 CBC 加密。
该方法接受一个参数 data,表示要进行加密的数据。在方法实现中,首先使用 this.random() 方法生成两个长度为 16 的随机字符串,分别作为 SM4 加密算法的密钥和初始向量;然后,使用 sm4Encrypt() 方法对输入数据进行 SM4 CBC 加密,并将加密结果和密钥信息一起返回。
需要注意的是,在使用该方法时,不需要自行提供密钥和向量,因为该方法会自动生成随机的密钥和向量,并将其与加密结果一起返回。由于密钥信息是保存在明文中的,因此该方法的安全性可能不如使用固定的密钥进行加密。另外,在进行加密操作时,输入数据最好使用合适的编码方式转换为字节数组,避免编码问题导致的计算错误。
const smTool = new SMTool()
const data = 'abc123'
const [key, iv, result] = smTool.sm4RandomEnc(data) // 对 "abc123" 进行随机密钥加密,并获取密钥信息和加密结果
console.log(key, iv, result) // 输出长度为 32 的两个随机字符串和一个 Uint8Array 类型的字节数组,例如 "f2d0b5a10f8585499e7fcdbd372ddbf1", "750f6a7253af2e57d72ba1344202c2ec", Uint8Array [ 81, 60, 199, 57, 163, 182, 148, 92, 167, 150, 154, 240, 245, 217, 144, 157 ]
要进行加密的数据。
返回一个数组,包含随机生成的密钥、向量和加密结果。
Generated using TypeDoc
SMTool 类是一个加密算法工具类,主要提供了 SM3、SM4 和 RSA 加密算法的实现,以及一些辅助方法。其中 sm3 方法用于对输入数据进行 SM3 摘要计算;sm4RandomEnc 方法用于对输入数据进行随机 CBC 加密,并返回加密结果和密钥信息;RSAEncrypt 方法用于对输入数据进行 RSA 公钥加密。这些算法都是常用的密码学算法,可以用于保护数据的安全性。
Example