Я использовал CryptoSwift для шифрования некоторых данных, а затем зашифровал те же данные, используя Node.js. Но результаты не одинаковы. Я спросил автора, он сказал, что это не ошибка.Данные, зашифрованные CryptoSwift, не такие же, как Node.js
Я не знаю, где я ошибся. Вот фотографии, как я использовал CryptoSwift и Node.js:
Cipher алгоритм: 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
Вот скор код:
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 в 500-1000 раз медленнее, чем Common Crypto, и не проверен или сертифицирован. – zaph
Почему вы используете режим CFB, общий случай - использовать режим CBC. – zaph
Только тестовый код, не против :) – Neko