sds6065
sds6065

Reputation: 205

Unable to encode byte array to UTF8 then decode it back to bytes

I'm trying to convert a byte array to a string, then at a later time convert those strings back to a byte array, but I'm getting some inconsistent results.

var salt = System.Text.Encoding.UTF8.GetString(encryptedPassword.Salt);
var key = System.Text.Encoding.UTF8.GetString(encryptedPassword.Key);
...
var saltBytes = System.Text.Encoding.UTF8.GetBytes(salt);
var keyBytes = System.Text.Encoding.UTF8.GetBytes(key);

In this case, the original salt and key are both byte[20], but the new ones are not equal (salt being a byte[36], key a byte [41], both with totally different values).

Upvotes: 0

Views: 1075

Answers (1)

Jack A.
Jack A.

Reputation: 4443

Basically what @DourHighArch said. You can go string->binary->string, but you can't expect to be able to go binary->string->binary using text encoding.

For what you are doing, you probably want to use something like base64 encoding. So you could write it like this:

var salt = Convert.ToBase64String(encryptedPassword.Salt);
var key = Convert.ToBase64String(encryptedPassword.Key);
...
var saltBytes = Convert.FromBase64String(salt);
var keyBytes = Convert.FromBase64String(key);

Upvotes: 2

Related Questions