上海網(wǎng)站建設(shè)領(lǐng)導(dǎo)品牌公司官網(wǎng)怎么做
可以使用對(duì)稱加密算法(如 AES)來(lái)加密和解密字符串。對(duì)稱加密適合這種跨平臺(tái)加密解密的需求,因?yàn)榭梢允褂孟嗤拿荑€和算法在不同的編程語(yǔ)言和系統(tǒng)之間進(jìn)行加密和解密。
下面展示如何使用 Python 或 PHP 進(jìn)行加密,然后用 iOS (Swift) 來(lái)解密。我們將使用 AES-256 加密,這種加密方式具有廣泛的跨平臺(tái)支持,并且安全性高。
1、問(wèn)題背景
一位用戶需要用 PHP 或 Python 加密字符串,并在 iOS 應(yīng)用中對(duì)其進(jìn)行解密。加密結(jié)果要求為 base64 編碼,并在應(yīng)用中進(jìn)行解碼并顯示。用戶了解到 PHP 中存在密鑰填充問(wèn)題,因此不介意使用 Python 或 Perl 來(lái)進(jìn)行加密。
2、解決方案
PHP 代碼:
<?php// 定義加密函數(shù)
function encrypt($data, $key) {// 將密鑰轉(zhuǎn)換為 16 位或 24 位或 32 位$key = substr(md5($key), 0, 16);// 使用 OpenSSL AES 加密數(shù)據(jù)return base64_encode(openssl_encrypt($data, 'AES-256-ECB', $key));
}// 定義解密函數(shù)
function decrypt($data, $key) {// 將密鑰轉(zhuǎn)換為 16 位或 24 位或 32 位$key = substr(md5($key), 0, 16);// 使用 OpenSSL AES 解密數(shù)據(jù)return openssl_decrypt(base64_decode($data), 'AES-256-ECB', $key);
}// 測(cè)試加密和解密
$data = 'Hello, world!';
$key = 'secret';$encrypted_data = encrypt($data, $key);
$decrypted_data = decrypt($encrypted_data, $key);echo "Encrypted Data: " . $encrypted_data . "\n";
echo "Decrypted Data: " . $decrypted_data . "\n";?>
iOS 代碼:
import CommonCryptoclass Encryption {// 加密函數(shù)static func encrypt(_ data: Data, key: Data) -> Data? {let keyLength = kCCKeySizeAES256let ivSize = kCCBlockSizeAES128// 分配內(nèi)存用于保存加密結(jié)果var encryptedData = Data(repeating: 0, count: data.count + ivSize)// 加密數(shù)據(jù)guard let status: CCCryptorStatus = CCCrypt(CCOperation(kCCEncrypt),CCAlgorithm(kCCAlgorithmAES),CCOptions(kCCOptionECBMode),key,keyLength,nil,data,data.count,&encryptedData,encryptedData.count,nil) == kCCSuccess else {print("Encryption failed: \(status)")return nil}// 截取實(shí)際加密數(shù)據(jù)encryptedData = encryptedData[ivSize...]return encryptedData}// 解密函數(shù)static func decrypt(_ data: Data, key: Data) -> Data? {let keyLength = kCCKeySizeAES256let ivSize = kCCBlockSizeAES128// 分配內(nèi)存用于保存解密結(jié)果var decryptedData = Data(repeating: 0, count: data.count)// 解密數(shù)據(jù)guard let status: CCCryptorStatus = CCCrypt(CCOperation(kCCDecrypt),CCAlgorithm(kCCAlgorithmAES),CCOptions(kCCOptionECBMode),key,keyLength,nil,data,data.count,&decryptedData,decryptedData.count,nil) == kCCSuccess else {print("Decryption failed: \(status)")return nil}// 返回解密結(jié)果return decryptedData}
}// 測(cè)試加密和解密
let data = "Hello, world!".data(using: .utf8)!
let key = "secret".data(using: .utf8)!// 加密數(shù)據(jù)
let encryptedData = Encryption.encrypt(data, key: key)
print("Encrypted Data: \(encryptedData!)")// 解密數(shù)據(jù)
let decryptedData = Encryption.decrypt(encryptedData!, key: key)
print("Decrypted Data: \(String(data: decryptedData!, encoding: .utf8)!)")
確保 Python、PHP 和 Swift 都使用相同的算法(AES-256-CBC)和相同的填充方式(PKCS7)。