」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 跨平台使用 RSA 加密和解密保護數據

跨平台使用 RSA 加密和解密保護數據

發佈於2024-11-08
瀏覽:185

Securing Data with RSA Encryption and Decryption Across Platforms

RSA加密簡介

在當今的數位環境中,保護敏感資料對於個人和組織都至關重要。 RSA (Rivest-Shamir-Adleman) 加密作為保護資料的強大解決方案脫穎而出。它是一種非對稱加密演算法,這意味著它使用一對金鑰:用於加密的公鑰和用於解密的私鑰。 RSA 加密的主要好處之一是私鑰永遠不需要分享,這最大限度地降低了私鑰外洩的風險。

本文探討如何在三種流行的程式語言(JavaScript、Python 和 PHP)中使用 RSA 加密,從而更輕鬆地保護跨平台應用程式中的資料。

跨平台加密與解密:場景

假設您正在建立一個 Web 應用程序,其中敏感資訊(如身份驗證資料或個人詳細資料)必須在客戶端(前端)和伺服器(後端)之間安全傳輸。例如,您可以在客戶端使用 JavaScript 加密訊息,然後使用 Python 或 PHP 在伺服器上解密。

RSA 非常適合這種場景,因為它提供了一種語言加密和另一種語言解密的靈活性,確保了跨平台相容性。

RSA 實作:JavaScript、Python 和 PHP

JavaScript(附 JSEncrypt 的 Next.js)
加密:

import JSEncrypt from 'jsencrypt';

// Function to encrypt a message using a public key
const encryptWithPublicKey = (message) => {
  const encryptor = new JSEncrypt();
  const publicKey = process.env.NEXT_PUBLIC_PUBLIC_KEY.replace(/\\n/g, "\n");
  encryptor.setPublicKey(publicKey);
  const encryptedMessage = encryptor.encrypt(message);
  return encryptedMessage;
};

解密:

import JSEncrypt from 'jsencrypt';

// Function to decrypt a message using a private key
const decryptWithPrivateKey = (encryptedMessage) => {
  const decryptor = new JSEncrypt();
  const privateKey = process.env.PRIVATE_KEY.replace(/\\n/g, "\n");
  decryptor.setPrivateKey(privateKey);
  const decryptedMessage = decryptor.decrypt(encryptedMessage);
  return decryptedMessage;
};

解釋:

公鑰加密: JSEncrypt 函式庫使用公鑰加密訊息。這保證了只有對應的私鑰才能解密。
私鑰解密: 使用私鑰解密訊息,私鑰安全地儲存在環境變數中。
安全考量:透過使用RSA,我們確保客戶端發送的資料是加密且安全的。

Python(使用 rsa 函式庫)
加密:

import rsa
import base64

def encrypt_with_public_key(message: str, public_key_str: str) -> str:
    public_key = rsa.PublicKey.load_pkcs1_openssl_pem(public_key_str.encode())
    encrypted_message = rsa.encrypt(message.encode(), public_key)
    return base64.b64encode(encrypted_message).decode()

解密:

import rsa
import base64

def decrypt_with_private_key(encrypted_message: str, private_key_str: str) -> str:
    private_key = rsa.PrivateKey.load_pkcs1(private_key_str.encode())
    encrypted_bytes = base64.b64decode(encrypted_message.encode())
    decrypted_message = rsa.decrypt(encrypted_bytes, private_key)
    return decrypted_message.decode()

解釋:

公鑰加密: 使用公鑰對訊息進行加密,確保只有預期的私鑰持有者才能解密它。
Base64編碼:加密後,對訊息進行Base64編碼,以確保與文字傳輸的兼容性。
私鑰解密:私鑰用於解密Base64編碼的加密訊息,確保機密性。

PHP(使用 OpenSSL)
加密:

function encrypt_with_public_key($message) {
    $publicKey = getenv('PUBLIC_KEY');
    openssl_public_encrypt($message, $encrypted, $publicKey);
    return base64_encode($encrypted);
}

解密:

function decrypt_with_private_key($encryptedMessage) {
    $privateKey = getenv('PRIVATE_KEY');
    $encryptedData = base64_decode($encryptedMessage);
    openssl_private_decrypt($encryptedData, $decrypted, $privateKey);
    return $decrypted;
}

解釋:

公鑰加密: openssl_public_encrypt 函式使用公鑰對訊息進行加密,確保只有私鑰才能解密。
私鑰解密: openssl_private_decrypt 函式使用私鑰解密訊息,確保敏感資訊的安全。
環境變數:公鑰和私鑰都安全地儲存在環境變數中,增強安全性。

加密最佳實踐

使用環境變數:始終將密鑰儲存在環境變數中,而不是將它們硬編碼到應用程式中。這降低了暴露敏感資訊的風險。
加密敏感資料:加密個人和敏感數據,例如密碼、財務詳細資料或個人識別資訊 (PII),以防止未經授權的存取。
使用 HTTPS: 確保您的應用程式透過 HTTPS 進行通信,以保護傳輸中的資料。
安全金鑰管理:定期輪換加密金鑰並確保它們安全儲存。

為什麼選擇RSA加密?

增強資料安全性:RSA加密確保敏感資料在傳輸過程中保持安全,防止未經授權的存取。
非對稱加密: RSA 使用公鑰進行加密,使用私鑰進行解密,從而確保私鑰永遠不需要共用。
跨平台相容性: RSA 可以跨不同平台和程式語言無縫運作,使其成為客戶端和伺服器端使用不同技術的 Web 應用程式的理想選擇。

結論

RSA 加密提供了一種跨多個程式設計環境保護敏感資料的可靠方法。透過在 JavaScript、Python 和 PHP 中實現 RSA 加解密,您可以保護敏感資訊、增強安全性並確保跨平台相容性。無論是為了保護 API 呼叫、保護使用者資料或確保訊息的機密性,RSA 都提供了強大的加密解決方案。

如果您發現本指南有幫助,請考慮與其他開發人員分享,並繼續關注有關加密和資料安全的更多見解!

加密 #RSA #Cyber​​Security #DataSecurity #WebDevelopment #CrossPlatformSecurity #JavaScript #Python #PHP

版本聲明 本文轉載於:https://dev.to/shubhamkhan/securing-data-with-rsa-encryption-and-decryption-across-platforms-30d7?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3