原文連結:https://blog.csdn.net/2401_82471222/article/details/140538952
前端常用的六種資料加密方式包括Base64編碼、MD5加密、SHA-1加密、SHA-256加密、AES加密和RSA加密。每種加密方式都有其特定的使用場景和優缺點。以下是這些加密方式的詳細使用說明:
1. Base64編碼
定義與特點:
Base64是一種基於64個可列印字元來表示二進位制資料的編碼方法,並非加密演算法。
它透過將二進位制資料每3個位元組轉換成4個位元組的可列印字元,實現對資料的編碼。
使用場景:
主要用於在URL、Cookie、網頁中傳輸少量二進位制資料。
內嵌小圖片以減少伺服器訪問次數。
優缺點:
優點:演算法簡單,對效能影響不大,適合不同平臺、不同語言的傳輸。
缺點:增加資料體積約1/3,無法快取,大檔案時消耗CPU資源。
示例程式碼:
// 編碼 const encodedData = btoa('Hello, World!'); console.log('Encoded Data:', encodedData); // SGVsbG8sIFdvcmxkIQ== // 解碼 const decodedData = atob(encodedData); console.log('Decoded Data:', decodedData); // Hello, World!
2. MD5加密
定義與特點:
MD5是一種廣泛使用的雜湊函式,產生128位(16位元組)的雜湊值。
不可逆,常用於驗證資料的完整性。
使用場景:
密碼儲存(儘管不推薦直接用於密碼儲存,因為存在碰撞風險)。
檔案校驗等。
優缺點:
優點:計算速度快,效率高。
缺點:存在碰撞風險,不可逆,安全性較低。
示例程式碼(使用Node.js的crypto模組):
const crypto = require('crypto'); const hash = crypto.createHash('md5').update('Hello, World!').digest('hex'); console.log('MD5 Hash:', hash); // 6cd3556deb0da54bca060b4c39479839
3. SHA-1加密
定義與特點:
SHA-1是一種安全雜湊演算法,產生160位(20位元組)的雜湊值。
相比於MD5,安全性更高,但速度稍慢。
使用場景:
數字簽名、檔案校驗等。
優缺點:
優點:安全性高於MD5。
缺點:存在理論上的碰撞可能,速度較慢。
注意:由於SHA-1已被認為不再安全,建議使用SHA-256或更高版本的SHA演算法。
4. SHA-256加密
定義與特點:
SHA-256是SHA-2演算法族中的一員,產生256位(32位元組)的雜湊值。
比SHA-1更安全,速度也相當快。
使用場景:
廣泛用於密碼儲存、檔案校驗、數字簽名等。
優缺點:
優點:安全性高,速度快。
缺點:相比MD5和SHA-1,計算複雜度稍高。
示例程式碼(使用Node.js的crypto模組):
const hash = crypto.createHash('sha256').update('Hello, World!').digest('hex'); console.log('SHA-256 Hash:', hash); // 315f5bdb76d078c43b8ac0064e4a0164612b1fce77c869345bfc94c75894edd3
5. AES加密
定義與特點:
AES(高階加密標準)是一種對稱加密演算法,使用相同的金鑰進行加密和解密。
支援多種金鑰長度(如128位、192位、256位)。
使用場景:
本地資料加密、HTTPS通訊、網路傳輸等。
優缺點:
優點:演算法公開、計算量小、加密速度快、效率高。
缺點:安全性依賴於金鑰的保密性,金鑰管理複雜。
示例程式碼(使用Node.js的crypto模組):
const algorithm = 'aes-256-cbc'; const key = crypto.randomBytes(32); const iv = crypto.randomBytes(16); function encrypt(text) { let cipher = crypto.createCipheriv(algorithm, Buffer.from(key), iv); let encrypted = cipher.update(text); encrypted = Buffer.concat([encrypted, cipher.final()]); return { iv: iv.toString('hex'), encryptedData: encrypted.toString('hex') }; } function decrypt(text, iv, key) { let decipher = crypto.createDecipheriv(algorithm, Buffer.from(key), Buffer.from(iv, 'hex')); let decrypted = decipher.update(Buffer.from(text, 'hex')); decrypted = Buffer.concat([decrypted, decipher.final()]); return decrypted.toString(); } // 示例使用 const originalText = 'Hello, World!'; const encrypted = encrypt(originalText); console.log('Encrypted:', encrypted); const decryptedText = decrypt(encrypted.encryptedData, encrypted.iv, key.toString('hex')); console.log('Decrypted:', decryptedText);
注意:上面的示例程式碼中,key 和 iv(初始化向量)是在加密函式內部隨機生成的,這在實際應用中可能會導致問題,因為解密時你需要相同的 key 和 iv。通常,你會在加密時安全地儲存或傳輸這些值,以便解密時可以使用。
6. RSA加密
定義與特點:
RSA是一種非對稱加密演算法,使用一對金鑰:公鑰和私鑰。公鑰用於加密資料,私鑰用於解密資料。
安全性高,但加密和解密過程比對稱加密更慢。
使用場景:
資料加密、數字簽名等,特別是在需要公開加密金鑰的場合。
優缺點:
優點:安全性高,適用於分散式系統。
缺點:加密和解密速度較慢,金鑰生成複雜。
示例程式碼(使用Node.js的crypto模組):
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', { modulusLength: 2048, publicKeyEncoding: { type: 'spki', format: 'pem', }, privateKeyEncoding: { type: 'pkcs8', format: 'pem', } }); function encryptRSA(text, publicKey) { const buffer = Buffer.from(text); const encrypted = crypto.publicEncrypt(publicKey, buffer); return encrypted.toString('base64'); } function decryptRSA(text, privateKey) { const buffer = Buffer.from(text, 'base64'); const decrypted = crypto.privateDecrypt(privateKey, buffer); return decrypted.toString('utf8'); } // 示例使用 const encrypted = encryptRSA(originalText, publicKey); console.log('RSA Encrypted:', encrypted); const decryptedText = decryptRSA(encrypted, privateKey); console.log('RSA Decrypted:', decryptedText);
以上示例提供了在Node.js環境下使用不同加密演算法的基礎方法。每種加密方式都有其特定的應用場景和限制,正確選擇和使用這些演算法對於保護資料安全和隱私至關重要。