前端加密cryptojs与JSEncrypt使实例详解

yizhihongxing

前端加密 cryptojs 与 JSEncrypt 的使用攻略

什么是前端加密

前端加密,指的是在前端代码中使用加密算法对用户输入的敏感信息进行加密,从而保证信息在传输过程中不会被轻易地窃取。前端加密通常采用一些常见的加密算法,如 AES、RSA 等。

加密库

前端加密需要使用到一些加密库,比如 cryptojsJSEncrypt

  • cryptojs:提供常见的对称加密算法,比如 AES、DES 等
  • JSEncrypt:提供非对称加密算法,比如 RSA 等

cryptojs 的使用方法

安装

通过 npm 安装:

npm install crypto-js

常见加密算法

AES 加密

const CryptoJS = require('crypto-js')

const plaintext = 'hello world'
const key = '123456'

const ciphertext = CryptoJS.AES.encrypt(plaintext, key).toString()
console.log(ciphertext) // U2FsdGVkX1/ze0ney1Ct1g+L+0zSJYZAAOraUcKKGcQ=

MD5 加密

const CryptoJS = require('crypto-js')

const plaintext = 'hello world'

const hashed = CryptoJS.MD5(plaintext).toString()
console.log(hashed) // 5eb63bbbe01eeed093cb22bb8f5acdc3

更多使用方法请参考官方文档:https://github.com/brix/crypto-js

JSEncrypt 的使用方法

安装

通过 npm 安装:

npm install jsencrypt

生成密钥对

import JSEncrypt from 'jsencrypt'

const key = new JSEncrypt({ default_key_size: 2048 })
key.getKey()

const publicKey = key.getPublicKey()
const privateKey = key.getPrivateKey()

加密/解密

import JSEncrypt from 'jsencrypt'

const plaintext = 'hello world'

const publicKey = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDoZb/mPrXk8c+LJ0wmJ+oJWf6xm1T3IiqLl+94M1Vq+6dBKP5iDsr5+pk9cMAeeBtEBdHia1Tyb8WR3eeoGiOgQzPe4iwFLjHSqH8WBLwOapo9lJ/0ZkcmXo5a+wA+Q4JbOGTEz0UZhj0z6NzTpi9xZuvvMvYXzEnFTcL4wIDAQAB'
const privateKey = 'MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBAOhlv+Y+teTxz4snTCYn6gld/rGbxPciKouX73gzVWr7p0Eo/mIOyvn6mT1wwB54G0QF0eJrVPJvxZHdr3qgaI6BDM97iLAsuMdKofxYEvA5qmj2Un/RmRyZejlr7AD5Dgls4ZMTPRRmGPTPo3NOmL3Fm6+8y9hfMScVNwvjAgMBAAECgYAKH/1FXV1kbdxZDi3vBqCfm9LrSlaZ51aGKsp4N1sJz/DezSx4/R+4MQ4ywdq5sJkN7p5wBeo8S9Qq0aTnWXYdBlegLnn5Ak8JgJnRrunmepJFllY6Bd/GWm1PJzJ94XJsyze0ex/pgf+UHnvebIYCO7cCfZVE2kEB779DfCwQJBANcjEdSXFFx0vDOyQftnxQ9WjxP7Df4bktvixNpIXeOYaXxn5ZNVT+BAteLPG6Udrpf5FAqVwL1ZwVl+IdgsNM8CQQCmOiFpFX9C0Z/7PlvXbbEoyGmQYjzXMZxYv24nP7d8GX6FnZJSROeJ//XOMCNKckxMm5Jr0zwRgi9qX/rxc8FzAkBhM6tZnDwaI/+Ixfrsu4sOLRm9B2UPtkcBAhP5dT2jrM5kmBBQBJ/geuIlRQ5FHYvlQAa4iG4sC4ZJZS1eXODZAkAW/w8YXvenLDNVmKoXtTCkN+ADsu7J8xSCKt42w8BibKZmkhSR+9mQzWYqNTrme7Dj7mRdAnaniosfIh+4c7lAkEAzCSYej55AbDDW2lkwmHkEwghJXiPm/Q6Ck4AKpIUZrGn2aW9SfjvwP4Qn+7XZL9Q0hse1bnrrs+CmpL+C1u5w=='

const encrypt = new JSEncrypt()
encrypt.setPublicKey(publicKey)
const ciphertext = encrypt.encrypt(plaintext)

const decrypt = new JSEncrypt()
decrypt.setPrivateKey(privateKey)
const decrypted = decrypt.decrypt(ciphertext)

console.log(ciphertext)
console.log(decrypted)

更多使用方法请参考官方文档:https://github.com/travist/jsencrypt

示例

使用 cryptojs 对用户密码进行加密

import CryptoJS from 'crypto-js'

const plaintext = 'password'
const salt = 'abcdefg'
const key = CryptoJS.PBKDF2(plaintext, salt, { keySize: 256 / 32, iterations: 1000 })
const ciphertext = CryptoJS.AES.encrypt(plaintext, key)
const encoded = encodeURIComponent(ciphertext.toString())

console.log(key) // c8ae8ca23c2fdef3d0778183fac4ae31a4f529bbb6f75655e0517a16760c0c7c
console.log(encoded) // U2FsdGVkX1+xWwWlK2BCo0TJmgjOVWBVzSjIE6fUboY%3D

使用 JSEncrypt 对用户信息进行加密

import JSEncrypt from 'jsencrypt'

const key = new JSEncrypt({ default_key_size: 2048, default_public_exponent: '010001' })
key.getKey()

const publicKey = key.getPublicKey()

const plaintext = {
  username: 'example',
  password: 'password123'
}

const encrypt = new JSEncrypt()
encrypt.setPublicKey(publicKey)
const ciphertext = encrypt.encrypt(JSON.stringify(plaintext))
const encoded = encodeURIComponent(ciphertext)

console.log(publicKey) // -----BEGIN PUBLIC KEY-----MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDO9vcPyBa1fhPpM6F3MkbBVRaZM0Q8qAL7Lc2VusqWIYC/FTxSOJHb+UETKYowm+tn/H81RttnPYnPIW2YZRkTuO0IqxNS7LgB7w/LaDTQh4RpL/5YQrLpaFqdp/mZnGSDMIFtHL6AHlX7e41vIQBwILdnnk1fqRV6Wi0bX5MvzwQIDAQAB-----END PUBLIC KEY-----
console.log(encoded) // zUTaHJrOq0o9o8C9lo8V4kfEu0E2Cf9w%2BMGxEflk0X3VWOrnN8v0L4MPyuUlNLix0aJkuREJeb7hk9Z9Nw9UEFcafJLW2Lx7roT9tO4vZdaw1LSpvwD0g4gm5hd0zibJkqX4vT4ivX5NeAE0k/+zAQWARpkl8Dz45gr1AYSw8z8%3D

结语

以上是关于前端加密的一些介绍和实例,希望对大家的学习有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:前端加密cryptojs与JSEncrypt使实例详解 - Python技术站

(0)
上一篇 2023年5月19日
下一篇 2023年5月19日

相关文章

  • 关于js和php对url编码的处理方法

    当涉及到 URL 编码和解码时,JavaScript 和 PHP 都提供了自己的方法。 JavaScript URL 编码和解码 JavaScript 中处理 URL 编码和解码的方法是 encodeURIComponent() 和 decodeURIComponent() 方法。其中,encodeURIComponent() 用于将 URL 中的非字母数字…

    JavaScript 2023年5月19日
    00
  • js中延迟加载和预加载的具体使用

    下面我将详细讲解JS中延迟加载和预加载的使用攻略。 一、什么是延迟加载和预加载 1. 延迟加载 延迟加载(Lazy Load)是指在页面加载完成后,对于一些非必要的资源如图片、视频等等,先不进行加载,待页面滚动或者用户发生某些操作时再加载。这样可以让页面加载更快,提高用户的体验感。 2. 预加载 预加载(Preload)是指在页面正式加载之前,将一些可能需要…

    JavaScript 2023年5月27日
    00
  • JavaScript实现的in_array函数

    下面是关于“JavaScript实现的in_array函数”的完整攻略。 1. 了解in_array函数的作用 ‘in_array’函数可以判断一个元素是否在一个数组中。如果在,返回true,否则返回false。 2. 实现in_array函数 JavaScript中没有内置的in_array函数,但是可以使用一些简单的方法实现。 2.1 方法一:使用ind…

    JavaScript 2023年5月27日
    00
  • 实例:用 JavaScript 来操作字符串(一些字符串函数)

    实例:用 JavaScript 来操作字符串(一些字符串函数) 字符串是我们在编程中非常常用的数据类型,JavaScript提供了很多各种各样的字符串操作函数,我们可以通过阅读文档、书籍等方式学习这些函数。本篇攻略将会介绍一些常用的字符串函数并提供一些简单的示例代码,以便初学者快速掌握字符串函数的使用方法。 字符串截取函数 (substring) subst…

    JavaScript 2023年5月18日
    00
  • 浅谈JS原型对象和原型链

    下面是详细的讲解“浅谈JS原型对象和原型链”的完整攻略。 什么是JS原型对象和原型链 在开始讲解JS原型对象和原型链之前,我们需要先理解一下构造函数和实例化的概念。在JS中,构造函数是指用来创建对象的函数,而实例化则是指创建对象的过程。比如下面的代码就定义了一个构造函数: function Person(name, age) { this.name = na…

    JavaScript 2023年5月27日
    00
  • JS数组排序技巧汇总(冒泡、sort、快速、希尔等排序)

    JS数组排序技巧汇总 在 Javascript 中,排序操作是非常常见的操作。本篇文章将会介绍常见的几种排序算法:冒泡排序、选择排序、插入排序、快速排序和希尔排序。同时,我们也会讲解如何使用这些算法在 Javascript 中进行排序。 冒泡排序 冒泡排序是最基础的算法之一,也是最容易理解的算法之一。它通过依次比较相邻的两个元素,把大的元素往后排,小的元素往…

    JavaScript 2023年5月27日
    00
  • 深入理解JavaScript中的Base64编码字符串

    深入理解JavaScript中的Base64编码字符串 什么是Base64编码字符串? Base64编码是一种将二进制数据转换为可打印ASCII字符的编码方式,其常用于在网络上传输数据,例如将图片或音频文件转换为Base64编码字符串,然后将其作为字符串传输。 Base64编码将每3个字节转换为4个ASCII字符,字节不足时会进行填充。Base64编码表中包…

    JavaScript 2023年5月19日
    00
  • js 字符串反转(倒序)的几种方式总结

    JS 字符串反转(倒序)的几种方式总结 在 JavaScript 中,我们可以对字符串进行反转,也就是将字符串中字符的顺序倒过来,从而得到反转后的字符串。本文将会总结几种在 JavaScript 中实现字符串反转操作的方法。 方法一:逐个字符拼接字符串 首先,我们可以循环遍历原字符串,并逐个将字符拼接成新的反转后的字符串。具体实现如下: function r…

    JavaScript 2023年5月28日
    00
合作推广
合作推广
分享本页
返回顶部