2

I'm trying to encrypt a string and then decrypt it back using CryptoSwift. Here's the code:

    let key: [UInt8] = [0x2b,0x7e,0x15,0x16,0x28,0xae,0xd2,0xa6,0xab,0xf7,0x15,0x88,0x09,0xcf,0x4f,0x3c]
    let iv: [UInt8] = [0x00,0x01,0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,0x0A,0x0B,0x0C,0x0D,0x0E,0x0F]

    let message = "Hello there!".dataUsingEncoding(NSUTF8StringEncoding)!.arrayOfBytes()
    do {
        let encryptedBytes = try ChaCha20(key: key, iv: iv)!.encrypt(message)
        let decryptedBytes = try ChaCha20(key: key, iv: iv)!.decrypt(encryptedBytes)
        let data = NSData.withBytes(decryptedBytes)
        let decrypted = String(data: data, encoding: NSUTF8StringEncoding)

        print(decrypted) // this should print "Hello there!", but it doesn't
    }
    catch { ... }

I think this should print out "Hello there!", the original string. But instead I get this: (<48656c6c 6f207468 65726521>, 4)

Any ideas what am I doing wrong?

1
  • 1
    This looks like Swift bug to me, the code looks OK. Commented Aug 5, 2015 at 22:30

1 Answer 1

2

I figured this out. Changed this line:

let decrypted = String(data: data, encoding: NSUTF8StringEncoding)

to:

let decrypted = String(bytes: decryptedBytes, encoding: NSUTF8StringEncoding)

and it's working now.

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.