2

CryptoSwift を使用して一部のデータを暗号化し、次に Node.js を使用して同じデータを暗号化しました。しかし、結果は同じではありません。作者に聞いたところ、バグではないとのことでした。

どこで間違えたのかわからない。以下は、CryptoSwift と Node.js の使用方法の写真です。

暗号アルゴリズム: aes-256-cfb

キー: 32 バイト 1

iv: 16 バイト 0

CryptoSwift: 開発ブランチ 0.1.1

Node.js: LTS 4.2.3

CryptoSwift によって暗号化されたデータ

Node.js 4.2.3 で暗号化されたデータ

これが迅速なコードです:

    func testAES() {
    let key = [UInt8](count: 32, repeatedValue: 1)
    let iv = [UInt8](count: 16, repeatedValue: 0)
    print(key)
    print(iv)

    let aes256cfb = try! AES(key: key, iv: iv, blockMode: .CFB)

    let en1 = try! aes256cfb.encrypt([0x5, 0x77], padding: nil)
    print(en1.map({ i in String(format: "%2x", i)}))

    let en2 = try! aes256cfb.encrypt([0x5, 0x0, 0x3, 0x89, 0x20], padding: nil)
    print(en2.map({ i in String(format: "%2x", i)}))
}

CryptoSwift: 
["77", "ef"]
["77", "98", "c9", "2c", "45"]

Node.js: 
<Buffer 77 ef>
<Buffer cf a5 66 8a 3e>

ご覧のとおり、最初の 2 バイトは同じですが、残りは異なります。なんで?私のコードの書き方は間違っていますか?クリプトについてよくわからないので理由を教えてください。どうもありがとう。

4

2 に答える 2

1

その質問に答えるために。

NodeJS コードは [0x5, 0x77, 0x5, 0x0, 0x3, 0x89, 0x20] を暗号化しますが、CryptoSwift コードは [0x5, 0x77] を暗号化し、次に [0x5, 0x0, 0x3, 0x89, 0x20] を暗号化します。これが、異なる結果が得られる理由です。

于 2015-12-12T22:35:59.493 に答える