JavaScript 示例: jsencrypt 私钥 16位密码短语 + cryptojs AES加解密

JavaScript 示例: jsencrypt 私钥 16位密码短语 + cryptojs AES加解密

html 复制代码
<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>JavaScript 示例: jsencrypt 私钥 16位密码短语 + cryptojs AES加解密</title>
</head>

<body>
  <script src="https://cdn.bootcdn.net/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
  <script src="https://cdn.bootcdn.net/ajax/libs/jsencrypt/3.2.1/jsencrypt.min.js"></script>
  <script>
    // 第一步:获取"私有秘钥"并保存留用
    // 以下秘钥通过 new JSEncrypt().getPrivateKeyB64() 获取并将获取的秘钥通过字面量赋值给 privateKey
    const privateKey = `MIICWwIBAAKBgQCF5SRovhqNKrl2YtApM1OH9JcXF99NtjHa2zHIqMpFiHTW8fiplcIJIrMENqhwz/lT1ArfDrU0yvFX1H1xKKkd8qTts7ysEx5sl+gO4v8KNyP5NnMZ5qmpGO2Kwa67tRyl0JiU0hIGueTegyXAzalfD3TZ3wyckY8q0w93oYGf0QIDAQABAoGAN+CWvzeGsR8BYwx9vpPy6iwC2dpWkIHWcHVFY249a6M0z3cPxQYAgft/JeUBioLglEFLgCcNLEj9SyAccZr8aCra0DDI6IrjVBlHd4OYP1j51hpRM4D0A+opI2D08lD40jFHfc+iVBBfEuo/yiN5s8I1Ppcq8RfCstobMUJ2w5kCQQDmbJb9UjzSaS4xSHS1vHKA6gDZqQk91N3q3H+B/mPOvzzUvYs0F9/B37mKWLX7QQNgTTOHKQrpeX+d7kz/CT+nAkEAlMG3mAW+kpKyEWATribNijkBXZA4lqO9BpgnEPW/DKfst7KvZLqsrmuDfzmKnQ5qD+3tegBu57eEyTTnVqJTxwJAG1NtZIVIKTvH+pg5HwRGH/ugNi/RpL+FwcB8bpIYjAAp2qDPzVG3e2pountiuXUwTU9aeQDpBl8eP0BvaR9TqQJABhQcYnPpo6em6xrX8wfW4k0OBzq7dTxfnwNcpU7Fbcj23VLJ4/3UzJPMHcjGJ0DNiLUaPSADaCiRnn8w7NNZRQJAJyEb+SE4Niies7dZt6dKHNCQErSw0rJhVPc4hEV/QdBJ7rUiBPMdHkz2BRfCizcPrCoY7gGQdEHYS6Dn6bThkA==`

    // 第二步:获取密码短语(16位的字符串)生成的"秘钥"
    // 以下秘钥通过第一步获取的 privateKey,作为JSEncrypt实例的私有秘钥,之后加密一个16位的字符串(1234567890123456)获得 
    // t = new JSEncrypt(), t.setPrivateKey(privateKey), t.encrypt('1234567890123456')
    let key = "eixa7bmeSU6LTWTSakyT90gaswNxoHBqQBNJHSL04ytasyAoNqc+g5IqvTRsZsiCA4/jawB/ynbH8PDtZi3LwUeHT4bCjo3eFfuG/3umB37Q/JqOK9LI2i8/PfDUSN9At/2g/PpWlfceTUkGX5RbcAaRV00yAJ9aDnkxuay+D2Q="

    // 原文
    let json = '{"isHeavyNet":"","linkUsage":"","telephoneNum":"138****7650","licenseOwner":"贾*贵","idNumber":"","orderTempSource":""}'
    // 密文
    let cipherText = 'N6SblKJZMlFY43UiNQepQLO1lsya9Nvkh+HAdw3FOpWthGZyQfjIuR2k92lPNuzSsiV/mU6hOC4HK81mLVvj4kUAj0c4e7VIVy1jxcT6TpOXLsLIQFgrnaZDs0dNsDdmUaSrmy6Y0WJFTRGoS2G+dpqDY5Qq87FawHIaGsuUBSI='

    // 通过第一步获取的"私有秘钥"对第二步获取的密码短语"秘钥"进行解密,得到密码短语明文(16位的字符串)
    function getSecretPassphrase(e) {
      var t = new JSEncrypt()
      t.setPrivateKey(privateKey)
      return t.decrypt(e)
    }

    // 加密方法
    function encipher(e, t) {
      var a = CryptoJS.enc.Utf8.parse(getSecretPassphrase(t))
      var n = CryptoJS.enc.Utf8.parse(e)
      var i = CryptoJS.AES.encrypt(n, a, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
      })
      return CryptoJS.enc.Base64.stringify(i.ciphertext)
    }
    console.log('加密密文:', encipher(json, key))

    // 解密方法
    function decipher(e, t) {
      var a = CryptoJS.enc.Utf8.parse(getSecretPassphrase(t))
      var n = CryptoJS.AES.decrypt({
        ciphertext: CryptoJS.enc.Base64.parse(e)
      }, a, {
        mode: CryptoJS.mode.ECB,
        padding: CryptoJS.pad.Pkcs7
      })
      return n.toString(CryptoJS.enc.Utf8)
    }
    console.log('解密明文:', decipher(cipherText, key))
  </script>
</body>

</html>

CryptoJS Doc
crypto-js Npm
JSEncrypt Doc
jsencrypt Npm

相关推荐
mayaairi35 分钟前
JS循环语句深度解析:嵌套for、while与do...while
开发语言·前端·javascript
To_OC1 小时前
啃完流式输出:从一个卡顿的 LLM 接口开始,我搞懂了数据流到底怎么 “流”
前端·javascript·llm
海上彼尚4 小时前
Nodejs也能写Agent - 22.LangGraph篇 - 上下文工程
前端·javascript·人工智能·langchain·node.js
默_笙5 小时前
🎉 AI 项目里为什么需要 BFF?因为我实在不想在前端处理二进制流
前端·javascript
xyphf_和派孔明7 小时前
企业级微前端项目完整创建步骤,第三步:配置 Vue 子应用
前端·javascript
路光.9 小时前
Vue2升级Vue3处理原 UMD/CommonJS 打包文件,不是标准 ESM
前端·javascript·vue.js·vue3
一只月月鸟呀10 小时前
移动端tap与click的区别 && 点透事件
开发语言·前端·javascript
KaMeidebaby11 小时前
卡梅德生物技术快报|抗体筛选:抗体筛选中的噬菌体展示四参数调优——从流程设计到数据验证
开发语言·前端·javascript
默_笙11 小时前
🔑 让 AI 学会"读"网页:我用 Cheerio 爬了一篇掘金文章,然后切成小块存进了向量库
前端·javascript
方方洛12 小时前
AI 教程系列-TUI 应用开发教程14-技能系统与可扩展性
前端·javascript·typescript