我使用CryptoSwift加密一些數據,然後使用Node.js加密相同的數據。但結果不一樣。我問作者,他說這不是一個錯誤。CryptoSwift加密的數據與Node.js不同
我不知道我犯了什麼錯誤。下面是我如何應用CryptoSwift和Node.js的圖片:
密碼算法:AES-256-CFB
鍵:32個字節1
IV:16個字節0
CryptoSwift:開發分枝0.1.1
的Node.js:LTS 4.2.3
Data encrypted by Node.js 4.2.3
這裏是SWIFT代碼:
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>
可以看到,前兩個字節是相同的,但其餘的都沒有。爲什麼?我的代碼寫錯了嗎?我對密碼不太瞭解,請告訴我原因。非常感謝。
如果您關心性能或安全性,請勿使用CryptoSwift。 CryptoSwift比Common Crypto慢500到1000倍,並且沒有經過良好的審查或認證。 – zaph
你爲什麼使用CFB模式,一般情況是使用CBC模式。 – zaph
只是測試代碼,不介意:) – Neko