Nodejs JavaScript 字符串加密

情景

問題的場景是這樣的:我們需要在瀏覽器cookie中存儲用戶名,但又不想直接明文存儲,所以對它進行了簡單的加密存儲。

因為是簡單的加密,目的只是不希望明文存儲。我們使用了Base64 編碼,使得cookie里的存儲不可只讀即可。

寫入時是加密,讀取的時候當然需要解密。Base64 編碼的加密解密方法為:

// Base64 編碼
var encodedString = btoa("Hello, World!");// Base64 解碼
var decodedString = atob(encodedString);

使用 btoa() 函數對字符串進行 Base64 編碼,使用 atob() 函數進行解碼。如,加密一個字符串:abc,編碼后的結果是:YWJj。從這個字符串并不能看出原始字符串是什么,達到了加密的效果。

那么,除了Base64 編碼,還有哪些字符串加密方法嗎?

字符串加密方法

1. MD5 散列

MD5 是一種常用的散列算法,可以將任意長度的字符串轉換為固定長度的哈希值。在 JavaScript 中,可以使用第三方庫,如 CryptoJS 來計算 MD5 散列。注意:MD5 已經不推薦用于加密敏感數據,但在某些非安全場景下仍然可以使用。

使用方法為:

// 使用 CryptoJS 計算 MD5 散列
var hash = CryptoJS.MD5("Hello, World!").toString();

2. SHA-256 散列

SHA-256 是一種安全的散列算法,可以將任意長度的數據轉換為固定長度的哈希值。在 JavaScript 中,可以使用第三方庫,如 CryptoJS 來計算 SHA-256 散列。使用方法為:

// 使用 CryptoJS 計算 SHA-256 散列
var hash = CryptoJS.SHA256("Hello, World!").toString();

3. AES 加密

AES(Advanced Encryption Standard)是一種常用的對稱加密算法,能夠對數據進行加密和解密。在 JavaScript 中,可以使用第三方庫,如 CryptoJS 來進行 AES 加密。AES加密和解密的使用方法為:

// 使用 CryptoJS 進行 AES 加密
var encrypted = CryptoJS.AES.encrypt("Hello, World!", "SecretKey123").toString();// 使用 CryptoJS 進行 AES 解密
var decrypted = CryptoJS.AES.decrypt(encrypted, "SecretKey123").toString(CryptoJS.enc.Utf8);

從上述可以看出,除了Base64編碼外,在JavaScript中對字符串進行加密都可以使用CryptoJS庫進行,它封裝了JavaScript的另外三種加密方法。

但是,需要注意的是:這些只適用于一些簡單的加密,在真正需要對敏感數據進行加密時,應該使用專門的加密庫或工具,并遵循最佳實踐以確保數據的安全性

字符串加密方法比較

雖然上述幾種方法都可以對字符串進行加密,但是每種加密方法的用途和適用場景不同。下面對這幾種方法進行比較:

1. Base64 編碼:

Base64 編碼是一種簡單的編碼方式,將字符串轉換為可打印的 ASCII 字符。它并不是真正的加密算法,只是一種編碼方法,可以用于在數據傳輸過程中隱藏數據或將二進制數據轉換為字符串形式。Base64 編碼后的數據可以輕松解碼回原始字符串。

  • 優點:簡單易用、編碼解碼方便。
  • 缺點:不提供真正的加密功能,編碼后的數據仍然可以被解碼。

2. 散列算法(如 MD5、SHA-256):

散列算法將任意長度的字符串轉換為固定長度的哈希值,不可逆轉。它通常用于驗證數據完整性或作為密碼存儲的一種方式,但不適合用作加密敏感數據。

  • 優點:快速計算、不可逆、適用于驗證數據完整性。
  • 缺點:不可逆,無法還原原始數據。

3. 對稱加密算法(如 AES)

對稱加密算法使用相同的密鑰進行加密和解密,是一種常見的加密方法。它可以對數據進行強加密,但在加密和解密過程中需要確保密鑰的安全性。

  • 優點:強加密、加密解密速度快。
  • 缺點:需要安全地管理密鑰。

4. 非對稱加密算法(如 RSA):

非對稱加密算法使用一對密鑰,即公鑰和私鑰。公鑰用于加密數據,私鑰用于解密數據。非對稱加密通常用于安全通信和數字簽名,但在處理大量數據時速度較慢。

  • 優點:安全、可用于安全通信和數字簽名。
  • 缺點:加密解密速度慢。

結論

選擇適當的加密方法取決于你的具體需求和安全要求:

  • 如果只是隱藏數據或進行簡單的轉換,Base64 編碼足夠。
  • 如果需要對數據進行強加密,對稱加密算法如 AES 是一個不錯的選擇。
  • 對于安全通信和數字簽名,非對稱加密算法如 RSA 是更好的選擇。

所以,請根據具體情況選擇合適的加密方法,并確保遵循最佳實踐來保護數據的安全性。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/161479.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/161479.shtml
英文地址,請注明出處:http://en.pswp.cn/news/161479.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Arthas 監聽 Docker 部署的java項目CPU占比高的信息

1、Linux上安裝Arthas wget https://alibaba.github.io/arthas/arthas-boot.jar2、docker ps 查看目標項目的容器ID 3、copy Arthas 到目標容器中 (注意有 😕 ) docker cp arthas-boot.jar d97e8666666:/4、進入到目標容器目錄中 docker exec -it d97e8666666 /b…

5-7求三種數的和

#include<stdio.h> int main(){double sum10;double sum20;double sum30;double sum;int i;for(i1;i<100;i){sum1sum1i;}printf("sum1結果是&#xff1a;%15.6f\n",sum1);for(i1;i<50;i){sum2sum2i*i;}printf("sum2結果是&#xff1a;%15.6f\n"…

TS是什么、為什么、怎么辦

TS是什么 javascript程序的靜態類型檢查器 為什么要用TS js編寫時在預期不同類型值的地方使用了某種類型的值&#xff0c;導致常見的類型錯誤 js只能提供動態類型&#xff0c;也就是運行一下代碼才能知道發生了什么&#xff0c;需要靜態類型的檢查 TS怎么用 1、安裝vscode…

連接服務器的腳本

對于記不住的服務器密碼且不愿用三方工具俺簡單寫了個腳本&#xff08;檢測下最近shell腳本的學習效果咋樣&#xff09; expect 是處理交互的一種腳本語言&#xff0c;spawn啟動指定進程 -> expect獲取指定關鍵字 -> send想指定進程發送指定指令 -> 執行完成后退出 sp…

Oracle:poor sql導致的latch: cache buffers chains案例

巡檢時&#xff0c;執行如下sql發現長會話&#xff1a; SELECT SE.SID,SE.SERIAL#,TO_CHAR(LOGON_TIME,YYYY-MM-DD HH24:MI:SS),SE.STATUS,SE.OSUSER,SE.MACHINE,SE.PROGRAM,SE.BLOCKING_SESSION, SE.SQL_ID,SE.PREV_SQL_ID ,SE.EVENT,SE.P1TEXT,SE.P1,SE.P2TEXT,SE.P2,SE.P3…

LeetCode1161. Maximum Level Sum of a Binary Tree

文章目錄 一、題目二、題解 一、題目 Given the root of a binary tree, the level of its root is 1, the level of its children is 2, and so on. Return the smallest level x such that the sum of all the values of nodes at level x is maximal. Example 1: Input:…

visionOS空間計算實戰開發教程Day 4 初識ImmersiveSpace

細心的讀者會發現在在??Day1???和??Day2???的示例中我們使用的都是??WindowGroup??。 main struct visionOSDemoApp: App {var body: some Scene {WindowGroup {ContentView()}} } 本節我們來認識在visionOS開發中會經常用到的另一個概念??ImmersiveSpace??…

Spark---集群搭建

Standalone集群搭建與Spark on Yarn配置 1、Standalone Standalone集群是Spark自帶的資源調度框架&#xff0c;支持分布式搭建&#xff0c;這里建議搭建Standalone節點數為3臺&#xff0c;1臺master節點&#xff0c;2臺worker節點&#xff0c;這虛擬機中每臺節點的內存至少給…

transformer之KV Cache

一、為什么要研究KV Cache 非常有效的加速推理速度&#xff0c;效果如下所示&#xff1a; import numpy as np import time import torch from transformers import AutoModelForCausalLM, AutoTokenizer NAME_OR_PATH r*************** device "cuda" if torch.cu…

中職組網絡安全 Server-Hun-1.img Server-Hun-2.img

一串密碼 smbuser用戶和密碼登錄ssh還是失敗提示需要密鑰&#xff0c;嘗試ftp登錄成功 發現密鑰存放在.ssh/下&#xff0c;在kali上生成一個密鑰&#xff0c;通過上傳到.ssh/下&#xff0c;將其替換掉 使用kali生成密鑰 登錄成功,但是無法拿到root目錄下的flag 獲取root用戶權限…

電子學會C/C++編程等級考試2022年12月(一級)真題解析

C/C++等級考試(1~8級)全部真題?點這里 第1題:加一 輸入一個整數x,輸出這個整數加1后的值,即x+1的值。 時間限制:1000 內存限制:65536輸入 一個整數x(0 ≤ x ≤ 1000)。輸出 按題目要求輸出一個整數。樣例輸入 9樣例輸出 10 答案: //參考答案: #include<bits/st…

opencv-常用代碼

以下是一些OpenCV中常用的代碼片段&#xff0c;涵蓋了一些基本的圖像處理和計算機視覺任務。 加載和顯示圖像: import cv2# 讀取圖像 img cv2.imread(image.jpg)# 顯示圖像 cv2.imshow(Image, img) cv2.waitKey(0) cv2.destroyAllWindows()調整圖像大小: resized_img cv2.res…

鴻蒙4.0開發筆記之DevEco Studio頁面操作router的pushUrl頁面跳轉與back返回上一頁(五)

一、認識組件 關于HarmonyOS中ArkTS的基礎組件請參見文章鴻蒙4.0開發筆記之ArkTs語言基礎與基本組件結構&#xff08;四&#xff09; 二、實現頁面跳轉pushUrl 1、操作說明 實現頁面跳轉的核心便是router.pushUrl的調用&#xff0c;操作起來也很簡單&#xff0c;總共就四步…

Laravel 安裝(筆記一)

目錄 第一步、Laravel 一般使用 composer安裝 第二步、使用composer安裝項目 第三步、配置環境 第四步、訪問域名&#xff0c;安裝完成 Laravel 官網 l???????Installation - Laravel 中文網 為 Web 工匠創造的 PHP 框架 第一步、Laravel 一般使用 composer安裝 如…

13.求面積[有問題]

#include<stdio.h> #include<math.h> #include<bits/stdc.h> using namespace std;void fun(double a,b,c) {double p,c;p (abc)/2;c sqrt(p*(p-a)*(p-b)*(p-c));printf("面積是&#xff1a;%lf",c); }int main(){double a,b,c;scanf("%lf,%…

《golang設計模式》第三部分·行為型模式-06-備忘錄模式(Memento)

文章目錄 1. 概述1.1 角色1.2 類圖 2. 代碼示例2.1 設計2.2 代碼2.3 類圖 1. 概述 備忘錄&#xff08;Memento&#xff09;用于在不破壞目標對象封裝特性的基礎上&#xff0c;將目標對象內部的狀態存儲到外部對象中&#xff0c;以備之后恢復狀態時使用。 1.1 角色 Originato…

【洛谷 B2008】計算 (a+b)×c 的值 題解(順序結構+四則運算)

計算 (ab)c 的值 題目描述 給定 3 3 3 個整數 a , b , c a,b,c a,b,c&#xff0c;計算表達式 ( a b ) c (ab) \times c (ab)c 的值。 輸入格式 輸入僅一行&#xff0c;包括三個整數 a , b , c a,b,c a,b,c&#xff0c;數與數之間以一個空格分開。 輸出格式 輸出一行…

如何訪問linux上的web服務

1.獲取服務運行端口 例如8080 2.如果時vmware 需要先配置轉發端口和主機ip 主機ip需要未使用的 例如&#xff1a; 3.查看虛擬機防火墻設置 centos8 為例 &#xff1a; firewall-cmd --zonepublic --list-ports 查看放通端口 如果沒有放通 firewall-cmd --zonepublic --add-p…

04 if進階

elif 否則如果 如果條件沒有滿足 會繼續進入“否則如果”里面判斷 只要滿足一個條件 條件判斷立即終止 chinese 100 if chinese 100:print("我們去迪士尼玩")elif chinese > 90:print("我們去朱雀森林公園")else:print("回家寫作業")if n…

GO MySQL數據庫操作封裝

Go 語言操作數據庫, 數據庫連接封裝&#xff1a; package Test_dbimport ("database/sql""fmt"_ "github.com/go-sql-driver/mysql""log""sync" )var (DB *sql.DBpoolOnce sync.Once )func NewConnection() (*sql.…