2022年了你還不瞭解加解密嗎

来源:https://www.cnblogs.com/dtux/archive/2022/10/24/16820767.html
-Advertisement-
Play Games

前言 加密解密是前後端開發經常需要使用到的技術,應用場景包括不限於用戶鑒權、數據傳輸等,不同的應用場景也會需要使用到不同的簽名加密演算法,或者需要搭配不一樣的簽名加密演算法來達到業務目標。所以瞭解加解密,以及常用的加解密函數庫,可以根據不同的業務場景,選擇適合當下業務場景的加解密函數庫。 安全性威脅 這 ...


前言

加密解密是前後端開發經常需要使用到的技術,應用場景包括不限於用戶鑒權、數據傳輸等,不同的應用場景也會需要使用到不同的簽名加密演算法,或者需要搭配不一樣的簽名加密演算法來達到業務目標。所以瞭解加解密,以及常用的加解密函數庫,可以根據不同的業務場景,選擇適合當下業務場景的加解密函數庫。

安全性威脅

這裡借用 workPlus 對於安全性威脅概括,進行說明:

第一,中斷

攻擊者有意破壞和切斷他人在網路上的通信,這是對可用性的攻擊。

第二,截獲

屬於被動攻擊,攻擊者從網路上竊聽他人的通信內容,破壞信息的機密性。

第三,篡改

攻擊者故意篡改網路上傳送的報文,這是對完整性的攻擊。

第四,偽造

攻擊者偽造信息在網路傳送,這是對真實性的攻擊。

file

加密的意義

  1. 數據加密

    a. 敏感數據的加密 :敏感數據進行完整性校驗和加密存儲, 有效防止敏感數據被竊取,篡改,許可權被非法獲取;

    b. 金融支付保護:保證支付數據在傳輸和存儲過程中的完整性、保密性和支付身份的認證、支付過程的不可否認性;

    c. 電子票據驗偽:保證電子合同、電子發票、電子保單、電子病歷在傳輸、存儲過程中的保密性和完整性;

    d. 視頻監控安全:保證視頻、人臉、車輛、軌跡等隱私信息,以及個人數據在存儲過程中的保密性,防止數據泄露;

  2. 信息安全:

    a. 撞庫操作:是指收集已經在互聯網上泄漏的用戶和密碼信息, 生成對應的字典表,並嘗試批量登錄其他網站,然後得到一系列可以登錄的用戶, 撞庫的原因是由於信息泄漏, 而且泄漏的數據沒有加密或者加密的方式比較弱,這樣可以獲得到原來的用戶和密碼;

加解密的分類

  • 對稱加密

    a. 定義: 對稱加密(也叫私鑰加密)指加密和解密使用相同密鑰的加密演算法。有時又叫傳統密碼演算法,就是加密密鑰能夠從解密密鑰中推算出來,同時解密密鑰也可以從加密密鑰中推算出來。而在大多數的對稱演算法中,加密密鑰和解密密鑰是相同的,所以也稱這種加密演算法為秘密密鑰演算法或單密鑰演算法。它要求發送方和接收方在安全通信之前,商定一個密鑰。對稱演算法的安全性依賴於密鑰,泄漏密鑰就意味著任何人都可以對他們發送或接收的消息解密,所以密鑰的保密性對通信的安全性至關重要

    b. 特點:對稱加密演算法的特點是演算法公開、計算量小、加密速度快、加密效率高。

    c. 不足:秘鑰的管理和分發非常困難,不夠安全。在數據傳送前,發送方和接收方必須商定好秘鑰,然後雙方都必須要保存好秘鑰,如果一方的秘鑰被泄露,那麼加密信息也就不安全了。另外,每對用戶每次使用對稱加密演算法時,都需要使用其他人不知道的唯一秘鑰,這會使得收、發雙方所擁有的鑰匙數量巨大,密鑰管理成為雙方的負擔。

    d. 具體演算法: DES,AES,3DES,凱撒加密演算法等。

    file

  • 非對稱加密

    a. 定義: 非對稱加密演算法需要兩個密鑰:公開密鑰(publickey: 簡稱公鑰)和私有密鑰(privatekey: 簡稱私鑰)。公鑰私鑰是一對,如果用公鑰對數據進行加密,只有用對應的私鑰才能解密。

    b. 流程: 甲方生成一對密鑰並將公鑰公開,需要向甲方發送信息的其他角色(乙方)使用該密鑰(甲方的公鑰)對機密信息進行加密後再發送給甲方;甲方再用自己私鑰對加密後的信息進行解密。甲方想要回覆乙方時正好相反,使用乙方的公鑰對數據進行加密,同理,乙方使用自己的私鑰來進行解密。

    c. 特點: 演算法強度複雜、安全性依賴於演算法與密鑰但是由於其演算法複雜,而使得加密解密速度沒有對稱加密解密的速度快。

    d. 不足 :非對稱加密演算法比對稱加密演算法慢數千倍。

    e. 具體演算法: RSA, RSA可以通過認證來防止中間人攻擊, ECC(橢圓曲線加密演算法)。

    file

  • 混合加密

    a. 流程: 伺服器用明文的方式給客戶端發送自己的公鑰,客戶端收到公鑰之後,會生成一把密鑰(對稱加密用的),然後用伺服器的公鑰對這把密鑰進行加密,之後再把密鑰傳輸給伺服器,伺服器收到之後進行解密,最後伺服器就可以安全著得到這把密鑰了,而客戶端也有同樣一把密鑰,他們就可以進行對稱加密了。

    b. 特點: 混合加密則採取兩家之長,即解決了秘鑰的安全配送問題,同時也提高了加密與解密效率。

    file

  • 數字簽名

    a. 流程:發送報文時,發送方用一個哈希函數從報文文本中生成報文摘要,然後用發送方的私鑰對這個摘要進行加密,這個加密後的摘要將作為報文的數字簽名和報文一起發送給接收方,接收方首先用與發送方一樣的哈希函數從接收到的原始報文中計算出報文摘要,接著再公鑰來對報文附加的數字簽名進行解密,如果這兩個摘要相同、那麼接收方就能確認該報文是發送方的。

    b. 數字簽名有兩種功效:一是能確定消息確實是由發送方簽名併發出來的,因為別人假冒不了發送方的簽名。二是數字簽名能確定消息的完整性。因為數字簽名的特點是它代表了文件的特征,文件如果發生改變,數字摘要的值也將發生變化。不同的文件將得到不同的數字摘要。 一次數字簽名涉及到一個哈希函數、接收者的公鑰、發送方的私鑰

    file

  • 數字證書(或簡稱證書):是在 Internet 上唯一地標識人員和資源的電子文件。證書使兩個實體之間能夠進行安全、保密的通信。

filefile

加解密的應用場景

目前業務中使用的是sm2進行加解密

國密即國家密碼局認定的國產密碼演算法。主要有SM1,SM2,SM3,SM4。密鑰長度和分組長度均為128位。
1:SM1 為對稱加密。其加密強度與AES相當。該演算法不公開,調用該演算法時,需要通過加密晶元的介面進行調用。
2:SM2為非對稱加密,基於ECC。該演算法已公開。由於該演算法基於ECC,故其簽名速度與秘鑰生成速度都快於RSA。ECC 256位(SM2採用的就是ECC 256位的一種)安全強度比RSA 2048位高,但運算速度快於RSA。
3:SM3 消息摘要。可以用MD5作為對比理解。該演算法已公開。校驗結果為256位。
4:SM4 無線區域網標準的分組數據演算法。對稱加密,密鑰長度和分組長度均為128位。

const sm2 = require('sm-crypto').sm2; // uic中 
// 控制臺中的加密解密應用 
import { SM2 } from 'gm-crypto'; 
// sm2加密 
export function encryptSM(str, key) {     
  const result = SM2.encrypt(str, key, {         
    inputEncoding: 'utf8',         
    outputEncoding: 'hex', // 支持 hex/base64 等格式
});     
  // 04 表示非壓縮     
  return '04' + result; 
} 
// sm2解密 
export function decryptSM(str, key) {     
  return SM2.decrypt(str, key, {         
    inputEncoding: 'hex',         
    outputEncoding: 'utf8', // 支持 hex/base64 等格式     
  }); 
} 

思考

  1. 非對稱加密中公私鑰都可以加密,那麼什麼時候用公鑰加密,什麼時候用私鑰“加密” ?
  2. 什麼是數字簽名,數字簽名的作用是什麼?
  3. 為什麼要對數據的摘要進行簽名,而不是直接計算原始數據的數字簽名?
  4. 什麼是數字證書,數字證書解決了什麼問題?
  5. 前端進行加密到底有沒有用?

前端加密不是決定性的保護措施,但卻是一種有意義的低成本安全增強方案。


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 隨著互聯網的不斷普及,越來越多老百姓使用智能設備觸達互聯網。但用戶經常發現自己無意間提到的東西,打開App就收到相關產品的廣告推送,甚至有人懷疑手機App是通過麥克風來竊取自己平時聊天信息中的關鍵詞進行定向的廣告推送。 這種懷疑不無道理,與傳統廣告相比,如今的媒體廣告主投放的廣告定位更準確、形式更豐 ...
  • javascript編程單線程之同步模式 主流的js 環境都是單線程嗎模式執行js 代碼, js採用為單線程的原因與最開始設計初衷有關,最早是運行在瀏覽器端的腳本語言,目的是為了實現頁面上的動態交互,實現頁面交互的核心就是dom操作,這也就決定了js必須使用單線程的模式來處理,不然就會造成嚴重的線程 ...
  • 好家伙,JS基礎接著學, 1.事件流 頁面哪個部分擁有特定的事件? 可以把頁面想象成一個同心圓, 當你戳了其中的一點,其實你同時戳中了很多個圓 當你點擊一個頁面中的按鈕,實際上你同時點擊了這個按鈕,這個按鈕的容器,以及整個頁面 於是有了這麼個概念,事件流, 我們用事件流描述頁面接受事件的順序, 舉個 ...
  • 原博客地址 01. 如何開啟js嚴格模式?js嚴格模式有什麼特點? 參考點:js基礎知識 參考答案: // 全局開啟 'use stcict' // 局部開啟 function fu(){ 'use strict' } /* 1.全局變數必須先聲明 2.禁止使用with 3.創建eval作用域 4. ...
  • 01,如何開啟JS嚴格模式?JS嚴格模式有什麼特點? 兩種方式 全局開啟在js開頭加上 'use strict' 局部開啟,在作用域開頭加上 function fn(){ 'use strict' } 特點: 1,全局變數必須先聲明 2,禁止使用with 3,創建eval作用域 有單獨的作用域 4, ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 在 Vue,除了核心功能預設內置的指令 ( v-model 和 v-show ),Vue 也允許註冊自定義指令。它的作用價值在於當開發人員在某些場景下需要對普通 DOM 元素進行操作。 Vue 自定義指令有全局註冊和局部註冊兩種方式。先來 ...
  • 1 <!-- ! 廢話不多說,直接看代碼吧 ! --> 2 <template> 3 <div class=""> 4 <div class="chart" ref="ref_chart" style="width:370px;height:250px;"> </div> 5 </div> 6 </ ...
  • vue + elementUI項目中,el-cascader級聯選擇器使用頻率非常高,一些基本使用方法可以參考elementUI官方文檔,本文主要研究當介面只返回最後一級id時,如何向上找出所有父級數據,並設置組件el-cascader的預設值! 準備測試數據:方位、省、市區級聯選擇。 var li ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...