RSA与AES算法

RSA算法(非对称加密)

1. 安装依赖

npm install --save jsencrypt

2. 方法调用

import { JSEncrypt } from 'jsencrypt'

const rsaUtil = {

// RSA 位数,这里要跟后端对应

bits: 2048,

// 当前JSEncrypted对象

thisKeyPair: {},

// 生成密钥对(公钥和私钥)

genKeyPair: function (bits = rsaUtil.bits) {

let genKeyPair = {}

rsaUtil.thisKeyPair = new JSEncrypt({ default_key_size: bits })

// 获取私钥

genKeyPair.privateKey = rsaUtil.thisKeyPair.getPrivateKey().replace(/\n/g, '').replace('-----BEGIN RSA PRIVATE KEY-----', '').replace('-----END RSA PRIVATE KEY-----', '')

// 获取公钥

genKeyPair.publicKey = rsaUtil.thisKeyPair.getPublicKey().replace(/\n/g, '').replace('-----BEGIN PUBLIC KEY-----', '').replace('-----END PUBLIC KEY-----', '')

return genKeyPair

},

/**

* 加密方法

* @param plaintext  加密文本

* @param publicKey  公钥

* @returns {CipherParams|PromiseLike<ArrayBuffer>}

* @constructor

*/

Encrypt (plaintext, publicKey) {

let encrypt = new JSEncrypt()

encrypt.setPublicKey(publicKey)

return encrypt.encrypt(plaintext)

},

/**

* 解密方法

* @param ciphertext 解密文本

* @param privateKey 私钥

* @returns {WordArray|PromiseLike<ArrayBuffer>}

* @constructor

*/

Decrypt (ciphertext, privateKey) {

let decrypt = new JSEncrypt()

decrypt.setPrivateKey(privateKey)

return decrypt.decrypt(ciphertext)

}

}

export default rsaUtil

AES算法(对称加密)

1. 安装依赖

npm install --save crypto-js

2. 方法调用

import CryptoJS from 'crypto-js'

/**

* 加密方法

* @param plaintext  加密文本

* @param publicKey  公钥

* @returns {CipherParams|PromiseLike<ArrayBuffer>}

* @constructor

*/

export function Encrypt(plaintext, key) {

if (plaintext instanceof Object) {

// JSON.stringify

plaintext = JSON.stringify(plaintext)

}

let encrypted = CryptoJS.AES.encrypt(CryptoJS.enc.Utf8.parse(plaintext), CryptoJS.enc.Utf8.parse(key), {

mode: CryptoJS.mode.ECB,

padding: CryptoJS.pad.Pkcs7

})

return encrypted.toString()

}

/**

* 解密方法

* @param ciphertext 解密文本

* @param privateKey 私钥

* @returns {WordArray|PromiseLike<ArrayBuffer>}

* @constructor

*/

export function Decrypt(ciphertext, key) {

let decrypt = CryptoJS.AES.decrypt(ciphertext, CryptoJS.enc.Utf8.parse(key), {

mode: CryptoJS.mode.ECB,

padding: CryptoJS.pad.Pkcs7

})

let decString = CryptoJS.enc.Utf8.stringify(decrypt).toString()

if (decString.charAt(0) === '{' || decString.charAt(0) === '[') {

// JSON.parse

decString = JSON.parse(decString)

}

return decString

}

/**

* 生成16位秘钥

* @returns {string}

* @constructor

*/

export function GetKey() {

/**

* @return {string}

*/

function S4() {

return (((1 + Math.random()) * 0x10000) | 0).toString(16).substring(1)

}

return (S4() + S4() + S4() + S4())

}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容