2

CryptoSwiftを使用して PHP バックエンドから Swift にコードを変換する際に問題が発生しています。AES-256-CBC ですが、invalidKeySizeエラーが発生するか、生成された出力が期待される出力と一致しません。

私のPHPコードは、

$string = "MyStringToEncrypt";

$secret_key = sha1('MySecretKey');
$secret_iv = sha1('MySecretIV'); 

$output = false;
$encrypt_method = "AES-256-CBC";
$key = hash( 'sha256', $secret_key );
$iv = substr( hash( 'sha256', $secret_iv ), 0, 16 );

$output = base64_encode( openssl_encrypt( $string, $encrypt_method, $key, 0, $iv ));

return $output;

私の知る限り、256 暗号化であるため、16 バイトの IV と 32 バイトのキーが必要です。これをswiftで書く私の試みは、

import CryptoSwift

let secretKey = "MySecretKey".sha1()
let secretIv = "MySecretIV".sha1()

let keyString: String = String(secretKey.sha256().prefix(32))
let ivString: String = String(secretIv.sha256().prefix(16))

let data = "MyStringToEncrypt".data(using: String.Encoding.utf8)

var result = ""

do {

    let enc = try AES(key: key, iv: iv).encrypt(data!.bytes)
    let encData = NSData(bytes: enc, length: Int(enc.count))
    let base64String: String = encData.base64EncodedString(options: NSData.Base64EncodingOptions(rawValue: 0));
    result = String(base64String)

} catch {
    print("Error \(error)")
}

これにより 32 バイトのキーが得られますが、結果は PHP から得られるものではありません。を追加しない.prefix(32)と、長さ 32 バイトのキーを取得できず、無効なキー サイズ エラーが発生します。

4

0 に答える 0