1

我正在尝试解密一个由cryptojs解密但不是运气的字符串...我尝试使用cryptoswift但仍然失败

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)

谢谢你的帮助

4

1 回答 1

0

我找到了使用https://github.com/etienne-martin/WebCrypto.swift的解决方案

关于 java 脚本方面的一切都清楚,但对于 swift 方面需要包含 WebCrypto.js,因为它将从 swift 加载到加密和解密。

在 swift 中传递字节 64 以在 web 中加密:

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)!)
            })

javascript

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);
            }
        }
    });
于 2018-04-04T07:26:36.283 回答