让网站对搜索引擎友好,免费html5中文网站素材,秦皇岛优化seo,网站源码 一品资源网可以使用对称加密算法#xff08;如 AES#xff09;来加密和解密字符串。对称加密适合这种跨平台加密解密的需求#xff0c;因为可以使用相同的密钥和算法在不同的编程语言和系统之间进行加密和解密。
下面展示如何使用 Python 或 PHP 进行加密#xff0c;然后用 iOS (Swi…可以使用对称加密算法如 AES来加密和解密字符串。对称加密适合这种跨平台加密解密的需求因为可以使用相同的密钥和算法在不同的编程语言和系统之间进行加密和解密。
下面展示如何使用 Python 或 PHP 进行加密然后用 iOS (Swift) 来解密。我们将使用 AES-256 加密这种加密方式具有广泛的跨平台支持并且安全性高。 1、问题背景
一位用户需要用 PHP 或 Python 加密字符串并在 iOS 应用中对其进行解密。加密结果要求为 base64 编码并在应用中进行解码并显示。用户了解到 PHP 中存在密钥填充问题因此不介意使用 Python 或 Perl 来进行加密。
2、解决方案
PHP 代码
?php// 定义加密函数
function encrypt($data, $key) {// 将密钥转换为 16 位或 24 位或 32 位$key substr(md5($key), 0, 16);// 使用 OpenSSL AES 加密数据return base64_encode(openssl_encrypt($data, AES-256-ECB, $key));
}// 定义解密函数
function decrypt($data, $key) {// 将密钥转换为 16 位或 24 位或 32 位$key substr(md5($key), 0, 16);// 使用 OpenSSL AES 解密数据return openssl_decrypt(base64_decode($data), AES-256-ECB, $key);
}// 测试加密和解密
$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 {// 加密函数static func encrypt(_ data: Data, key: Data) - Data? {let keyLength kCCKeySizeAES256let ivSize kCCBlockSizeAES128// 分配内存用于保存加密结果var encryptedData Data(repeating: 0, count: data.count ivSize)// 加密数据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}// 截取实际加密数据encryptedData encryptedData[ivSize...]return encryptedData}// 解密函数static func decrypt(_ data: Data, key: Data) - Data? {let keyLength kCCKeySizeAES256let ivSize kCCBlockSizeAES128// 分配内存用于保存解密结果var decryptedData Data(repeating: 0, count: data.count)// 解密数据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}// 返回解密结果return decryptedData}
}// 测试加密和解密
let data Hello, world!.data(using: .utf8)!
let key secret.data(using: .utf8)!// 加密数据
let encryptedData Encryption.encrypt(data, key: key)
print(Encrypted Data: \(encryptedData!))// 解密数据
let decryptedData Encryption.decrypt(encryptedData!, key: key)
print(Decrypted Data: \(String(data: decryptedData!, encoding: .utf8)!))确保 Python、PHP 和 Swift 都使用相同的算法AES-256-CBC和相同的填充方式PKCS7。