2016-04-29 9 views
2

私のノードJSコードに何が問題なのかよくわかりません。ノードJSからの出力には、iOS Swiftの出力よりもいくつかの文字が欠けています。iOS SwiftとNode JS Cryptoの異なる出力

マイノード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のスウィフトコード:

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 SWIFT OUTPUT:3df3cfd9adef86489fd27629d75f3fcbb744e5bae846bde7df9e98571ba27f01

あなたが見ることができるように。出力は非常に似ています。 NodeJS出力にはいくつかの文字が欠けています。

答えて

1

CTR modeは、パディングを必要としないストリーミングモードです。 CryptoSwiftは、CTRのようなストリーミングモードが使用されていても常にパディングを追加するようです。あなたは何のパディングがスウィフトに適用されないことを要求する必要があります。

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

による 'の公共初期化子の不足のために(' NoPaddingは() '** **は現在' CryptoSwift'モジュールの外部呼び出すことはできませんのでご注意くださいNoPadding')。 私は[プルリクエスト](https://github.com/krzyzanowskim/CryptoSwift/pull/254)を開きました。これは 'develop'ブランチにマージされ、近い将来にリリースされる予定です(うまくいけば)。 –

+0

ありがとうございましたArtjom .. NoPadidng()を使用するとエラーが発生しました。私だけでなく、すぐに解決されることを嬉しく思っています。ありがとうございました。本当に役に立つ – nemoryoliver

関連する問題