前端常用6種資料加密方式的使用(最詳解)

yinghualeihenmei發表於2024-10-17

原文連結: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環境下使用不同加密演算法的基礎方法。每種加密方式都有其特定的應用場景和限制,正確選擇和使用這些演算法對於保護資料安全和隱私至關重要。

相關文章