最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

JavaScript使用JSEncrypt對數(shù)據(jù)加解密

 更新時間:2026年05月17日 14:44:44   作者:ALITTLE_01  
文章介紹了在Web開發(fā)中使用RSA非對稱加密算法保護敏感信息的方法,詳細講解了JSEncrypt庫的安裝、使用和注意事項,此外,還提供了生成公私鑰、動態(tài)獲取公鑰以及安全性建議等實用內(nèi)容,需要的朋友可以參考下

引言

在 Web 開發(fā)中,數(shù)據(jù)安全是至關(guān)重要的環(huán)節(jié)。當(dāng)涉及用戶密碼、身份證號等敏感信息的傳輸時,僅僅依賴 HTTPS 可能還不夠——在金融、政務(wù)等高安全場景中,通常需要在應(yīng)用層再做一次加密,以防止中間人攻擊或內(nèi)網(wǎng)抓包導(dǎo)致的數(shù)據(jù)泄露。

RSA 是一種非對稱加密算法,它使用一對密鑰:公鑰加密、私鑰解密。前端持有公鑰進行加密,后端持有私鑰進行解密,即使請求被截獲,攻擊者也無法還原明文數(shù)據(jù)。

1、關(guān)于 JSEncrypt

JSEncrypt 是一個基于 JavaScript 實現(xiàn)的 RSA 加密庫,專為瀏覽器環(huán)境設(shè)計,提供了簡單易用的 API。它的核心特點:

  • 輕量簡潔:API 只有幾個核心方法,學(xué)習(xí)成本低
  • 開箱即用:無需復(fù)雜的依賴配置
  • 支持標(biāo)準(zhǔn) PEM 格式:可與后端(Java、Python、PHP、Node.js)無縫對接

2、安裝

  • 使用 npm 安裝
npm install jsencrypt --save
  • 使用 yarn 安裝
yarn add jsencrypt

3、使用 JSEncrypt

import JSEncrypt from 'jsencrypt/bin/jsencrypt.min'

const publicKey = 'xxxx';

const privateKey = 'xxxx';

// 加密
export function encrypt(txt) {
  if (!txt) {
    return txt;
  }
  const encryptor = new JSEncrypt()
  // 設(shè)置公鑰
  encryptor.setPublicKey(publicKey)
  // 對數(shù)據(jù)進行加密
  return encryptor.encrypt(txt)
}

// 解密
export function decrypt(txt) {
  if (!txt) {
    return txt;
  }
  const encryptor = new JSEncrypt()
  // 設(shè)置私鑰
  encryptor.setPrivateKey(privateKey)
  // 對數(shù)據(jù)進行解密
  return encryptor.decrypt(txt)
}

4、生成公/私鑰

生成公/私鑰,點擊生成密鑰對,將生成的公鑰、私鑰復(fù)制到 js 文件中即可。

注意:公鑰的格式必須完整包含 -----BEGIN PUBLIC KEY----- 和 -----END PUBLIC KEY----- 標(biāo)記,否則加密會失敗。

5、注意事項

將公鑰寫死在代碼中雖然簡單,但存在兩個問題:

  1. 公鑰泄露后無法及時更換
  2. 無法實現(xiàn)密鑰輪換

最佳實踐是在應(yīng)用啟動時或進入登錄頁時,從后端動態(tài)獲取公鑰。

在 main.js 或 App.vue 中初始化:

// main.js
import { setPublicKey } from '@/utils/rsaEncrypt'
import axios from 'axios'

// 應(yīng)用啟動時獲取公鑰
async function initRSA() {
  try {
    const response = await axios.get('/api/public-key')
    if (response.data.code === 200) {
      setPublicKey(response.data.publicKey)
      console.log('RSA 公鑰初始化成功')
    }
  } catch (error) {
    console.error('獲取公鑰失敗', error)
  }
}

initRSA()

6、常見問題

  1. 加密返回 null
  • 原因一:公鑰格式不正確

確保公鑰包含了正確的頭尾標(biāo)識:

-----BEGIN PUBLIC KEY-----
(公鑰內(nèi)容)
-----END PUBLIC KEY-----
  • 原因二:待加密的數(shù)據(jù)過長

RSA 加密有長度限制(密鑰長度 1024 位時,最多加密 117 字節(jié);2048 位時最多 245 字節(jié))。如果遇到超長內(nèi)容需要加密,可以考慮:

  • 對長文本使用 AES 對稱加密,再用 RSA 加密 AES 密鑰(混合加密方案)
  • 或使用分段加密方案
  1. Vue 3 中的使用差異

在 Vue 3 中,使用方式和 Vue 2 基本相同,唯一的區(qū)別是 Composition API 的寫法:

<script setup>
import { ref } from 'vue'
import { encrypt } from '@/utils/rsaEncrypt'

const password = ref('')
const encryptedPwd = encrypt(password.value)
</script>
  1. TypeScript 支持

如果項目使用 TypeScript,可以安裝類型定義:

npm install @types/jsencrypt --save-dev

7、安全性建議

  • 必須使用 HTTPS:即使做了應(yīng)用層加密,HTTPS 仍然是傳輸安全的基礎(chǔ)
  • 公鑰動態(tài)獲?。罕苊鈱⒐€寫死在前端代碼中,通過接口動態(tài)獲取
  • 定期輪換密鑰:后端定期生成新的密鑰對,降低密鑰泄露風(fēng)險
  • 配合驗證碼機制:防止暴力 破解攻擊
  • 前端只加密,不解密:私鑰只保存在服務(wù)端,前端永遠不應(yīng)該持有私鑰

到此這篇關(guān)于JavaScript使用JSEncrypt對數(shù)據(jù)加解密的文章就介紹到這了,更多相關(guān)JavaScript JSEncrypt數(shù)據(jù)加解密內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JS獲取動態(tài)添加元素的方法詳解

    JS獲取動態(tài)添加元素的方法詳解

    這篇文章主要介紹了JS獲取動態(tài)添加元素的方法,結(jié)合實例形式分析了js動態(tài)添加DOM元素及獲取已添加的DOM元素相關(guān)操作技巧,需要的朋友可以參考下
    2019-07-07
  • webpack4的遷移的使用方法

    webpack4的遷移的使用方法

    本篇文章主要介紹了webpack4的遷移的使用方法,主要介紹了如何從webpack1.x升級到4.x,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-05-05
  • JavaScript如何實現(xiàn)精準(zhǔn)倒計時

    JavaScript如何實現(xiàn)精準(zhǔn)倒計時

    這篇文章主要為大家詳細介紹了JavaScript如何實現(xiàn)精準(zhǔn)倒計時功能,文中的示例代碼簡潔易懂,具有一定的借鑒價值,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2025-02-02
  • 數(shù)組Array的一些方法(總結(jié))

    數(shù)組Array的一些方法(總結(jié))

    下面小編就為大家?guī)硪黄獢?shù)組Array的一些方法(總結(jié))。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-02-02
  • 談?wù)凧avaScript類型系統(tǒng)之Math

    談?wù)凧avaScript類型系統(tǒng)之Math

    Math 對象并不像 Date 和 String 那樣是對象的類,因此沒有構(gòu)造函數(shù) Math(),像 Math.sin() 這樣的函數(shù)只是函數(shù),不是某個對象的方法。您無需創(chuàng)建它,通過把 Math 作為對象使用就可以調(diào)用其所有屬性和方法
    2016-01-01
  • d3.js中冷門卻實用的內(nèi)置函數(shù)總結(jié)

    d3.js中冷門卻實用的內(nèi)置函數(shù)總結(jié)

    D3.js是一個JavaScript庫,它可以通過數(shù)據(jù)來操作文檔。D3可以通過使用HTML、SVG和CSS把數(shù)據(jù)鮮活形象地展現(xiàn)出來。d3.js其實提供了很多內(nèi)置的函數(shù),可以卻被大家忽略了,下面這篇文章就來給大家詳細介紹了d3.js中冷門卻實用的一些內(nèi)置函數(shù),需要的朋友可以參考借鑒。
    2017-02-02
  • JS仿Windows開機啟動Loading進度條的方法

    JS仿Windows開機啟動Loading進度條的方法

    這篇文章主要介紹了JS仿Windows開機啟動Loading進度條的方法,實例分析了javascript操作html元素及對應(yīng)樣式實現(xiàn)特效的技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-02-02
  • JS刪除對象中某一屬性案例詳解

    JS刪除對象中某一屬性案例詳解

    這篇文章主要介紹了JS刪除對象中某一屬性案例詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-09-09
  • 微信小程序 TabBar 紅點提醒完美解決方案

    微信小程序 TabBar 紅點提醒完美解決方案

    TabBar 紅點提醒,很多小程序都需要這個功能比如聊天小程序,電商小程序等,這時候我們需要進行自定義 TabBar,本文通過實例代碼給大家介紹的非常詳細,感興趣的朋友跟隨小編一起看看吧
    2024-05-05
  • childNodes 用法兩例

    childNodes 用法兩例

    childNodes實現(xiàn)代碼
    2009-04-04

最新評論

阿勒泰市| 丰顺县| 池州市| 巴林左旗| 武隆县| 凤城市| 许昌县| 林周县| 明水县| 菏泽市| 连州市| 平利县| 兴隆县| 新巴尔虎右旗| 林周县| 甘洛县| 囊谦县| 玉田县| 鄂尔多斯市| 浦县| 孟州市| 沁阳市| 巴林右旗| 南通市| 来安县| 大余县| 林西县| 盈江县| 青铜峡市| 龙陵县| 信阳市| 邳州市| 兴和县| 泽库县| 长沙县| 额尔古纳市| 双柏县| 龙游县| 阿拉善左旗| 东城区| 崇州市|