1

I am trying to decrypt a string which is decrypted by cryptojs but not luck...I try to cryptoswift but still 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);

swift part:

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)

thanks for ur help

1 Answers1

0

I found a solution to use https://github.com/etienne-martin/WebCrypto.swift

all clear about java script side but for swift side need to include WebCrypto.js as it will load from swift to encryption and decryption.

to pass byte 64 for ecnrypted in web in swift:

data: Data(base64Encoded: "U2FsdGVkX1+4tZicpsJNw9TetmFZ/r+AVQu/g7WPq7Zeen/z2RWfGmlluOeKZgpy", options: NSData.Base64DecodingOptions.ignoreUnknownCharacters)!

full example:

swift

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