Как можно зашифровать AES 256 с помощью cryptojs и расшифровать в swift
Я пытаюсь расшифровать строку, которая расшифровывается с помощью cryptojs, но не удача... Я пытаюсь зашифровать, но все же faileu
var encrypted = CryptoJS.AES.encrypt("mystringforencryption", "secret");
console.log(encrypted);
console.log("encrypted.ciphertext");
console.log(encrypted.ciphertext);
console.log(encrypted.ciphertext.toString(CryptoJS.enc.Base64));
console.log("encrypted.key");
console.log(encrypted.key);
console.log(encrypted.key.toString(CryptoJS.enc.Base64));
console.log("encrypted.iv");
console.log(encrypted.iv);
console.log(encrypted.iv.toString(CryptoJS.enc.Base64));
console.log("encrypted.salt");
console.log(encrypted.salt);
console.log(encrypted.salt.toString(CryptoJS.enc.Base64));
console.log("encrypted.padding.pad");
console.log(encrypted.padding);
Быстрая часть:
let mdata = Data(base64Encoded: "U2FsdGVkX19zC/z0w6myZ74GbapfAywMvb3Al2aD4v8=")!
let count = [UInt8](mdata).count
let mbytes = Array([UInt8](mdata)[AES.blockSize ..< count])
let mkey = "secret".md5().bytes
let miv = Array([UInt8](mdata)[0 ..< AES.blockSize])
let aes = try AES(key: mkey, blockMode: BlockMode.CBC(iv: miv))
let decrypted = try aes.decrypt(mbytes)
let mresult = String(bytes: decrypted, encoding: .utf8)
print(mresult)
спасибо за твою помощь
1 ответ
Я нашел решение использовать https://github.com/etienne-martin/WebCrypto.swift
все ясно о стороне java-скрипта, но для быстрой стороны нужно включить WebCrypto.js, так как он будет загружаться из быстрой в шифрование и дешифрование.
передать байт 64 для зашифрованного в сети в swift:
data: Data(base64Encoded: "U2FsdGVkX1+4tZicpsJNw9TetmFZ/r+AVQu/g7WPq7Zeen/z2RWfGmlluOeKZgpy", options: NSData.Base64DecodingOptions.ignoreUnknownCharacters)!
полный пример:
быстрый
crypto.decrypt(data: Data(base64Encoded: "U2FsdGVkX1+4tZicpsJNw9TetmFZ/r+AVQu/g7WPq7Zeen/z2RWfGmlluOeKZgpy", options: NSData.Base64DecodingOptions.ignoreUnknownCharacters)!, password: password, callback: {(decrypted: Data?, error: Error?) in
print(String(data: decrypted!, encoding: .utf8)!)
})
Java script
WebCrypto.encrypt({
data: input,
password: password,
callback: function(response){
if( !response.error ){
console.log("encrypt base64")
console.log(response.result);
}else{
console.error(response.error);
}
}
});