gpt4 book ai didi

php - AES 256 加密,PHP/MySQL 与 Swift 的区别

转载 作者:搜寻专家 更新时间:2023-11-01 05:39:37 26 4
gpt4 key购买 nike

我试图在 PHP/mySQLSwift 之间获得相同的加密结果(使用 AES 256)。

这是我要加密的文本:{"email":"aze@aze.com","password":"aze"}
这是关键:toto
我正在使用 key 的 SHA1 哈希值进行加密:0B9C2625DC21EF05F6AD4DDF47C5F203837AA32C

这是我的 PHP 代码(结果如我所料,我使用本地数据库执行加密)

$data = array();
$data['email'] = 'aze@aze.com';
$data['password'] = 'aze';

$json = json_encode($data);
$request = $db->prepare("select AES_ENCRYPT('$json', SHA1('toto')) as data from dual");
$request->execute();
$request->setFetchMode(PDO::FETCH_ASSOC);

$encodedResult = $request->fetchAll();
$encodedResult = $encodedResult[0]['data'];

$base64Result = base64_encode($encodedResult));

编码结果为¤]¼–áú£?îfÞð"2Á«¯ä%s7Ûš>½qé}‘(J µƒ–"³}vë
Base64 结果是 pF28A5bh+qOdP+5mHN7wIjLBBKutr+Qlczfbmj69cel9kRYoShcgtYOWIrN9dsPr

如何在 Swift 或 Objective-C 中获得相同的结果?我尝试了不同的库,例如 CryptoSwift/CocoaSecurity,但结果总是不同。
看来 MySQL 使用 0 填充,我无法在 iOS 上工作。

编辑:为了清楚起见,我需要在 iOS 端实现 0 填充以获得与 MySQL 相同的结果,而不是在 PHP/MySQL 端实现 PKCS7。

最佳答案

CryptoSwift您可以轻松应用自定义填充

public struct ZeroPadding: Padding {
func add(data: [UInt8], blockSize:Int) -> [UInt8] {
// Padding logic here
}

func remove(data: [UInt8], blockSize:Int?) -> [UInt8] {
// Padding logic here
}
}

并将其作为参数传递给encrypt()

let encrypted = AES(key: key, iv: iv, blockMode: .CBC)?.encrypt(message, padding: ZeroPadding())

关于php - AES 256 加密,PHP/MySQL 与 Swift 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32185159/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com