2016-04-29 13 views
2

Я не уверен, что не так с моим кодом узла Node. На выходе из Node JS не хватает символов, чем выход в iOS Swift.iOS Swift vs Node JS Crypto Различные выходы

My Node JS код:

var crypto    = require('crypto'); 

var CRYPTO_ALGORITHM = "aes-256-ctr"; 
var CRYPTO_PASSWORD  = "3zTvzr3p67VC61jmV54rIYu1545x4TlY"; 
var CRYPTO_IV   = ""; 

var string_data = "OLIVER MARTINEZ OLIVER"; 

var cipher  = crypto.createCipheriv(CRYPTO_ALGORITHM, CRYPTO_PASSWORD, CRYPTO_IV); 
var encrypted = cipher.update(string_data, "utf8", "hex"); 
encrypted  += cipher.final("hex"); // to hex 

console.log("encrypted final: " + encrypted); 

// --------------------------------------------------------------- // 

var encrypted_string = encrypted; 

var decipher = crypto.createDecipheriv(CRYPTO_ALGORITHM, CRYPTO_PASSWORD, CRYPTO_IV); 
var decrypted = decipher.update(encrypted_string, "hex", "utf8"); 
decrypted  += decipher.final("utf8"); // to utf8 

console.log("decrypted final: " + decrypted); 

УЗЕЛ ВЫВОД: 3df3cfd9adef86489fd27629d75f3fcbb744e5bae846

Мой IOS Код Swift:

let CRYPTO_IV   = ""; 
let CRYPTO_PASSWORD  = "3zTvzr3p67VC61jmV54rIYu1545x4TlY"; 

let data    = "OLIVER MARTINEZ OLIVER"; 

let encrypted = try! data.encrypt(AES(key: CRYPTO_PASSWORD, iv: CRYPTO_IV, blockMode: .CTR)).toHexString(); 

print("encrypted: \(encrypted)"); 

IOS СВИФТ ВЫВОД: 3df3cfd9adef86489fd27629d75f3fcbb744e5bae846bde7df9e98571ba27f01

Как вы можете видеть. Выход очень похож. Только на выходе NodeJS отсутствуют некоторые символы.

ответ

1

CTR mode - это потоковый режим, который не требует каких-либо отступов. Кажется, что CryptoSwift всегда добавляет отступы, даже если используется потоковый режим, такой как CTR. Вы должны просить, чтобы ни отступы не будет применяться в Swift:

data.encrypt(AES(key: CRYPTO_PASSWORD, iv: CRYPTO_IV, blockMode: .CTR, padding: NoPadding())).toHexString();
+1

Пожалуйста, обратите внимание, что 'NoPadding()' ** не может ** называться вне модуля 'CryptoSwift' в настоящее время (из-за отсутствия общественного инициализаторе' NoPadding'). Я открыл запрос [pull request] (https://github.com/krzyzanowskim/CryptoSwift/pull/254), и он слит в ветку 'develop' и будет выпущен в ближайшем будущем (надеюсь). –

+0

Большое спасибо Artjom .. У меня также была ошибка при использовании NoPadidng() .. Я рад, что это не только я, и это скоро будет разрешено. Большое спасибо, сэр. Действительно полезно – nemoryoliver

Смежные вопросы