Solved

Encrypting a string and the Euro € character

Posted on 2012-04-09
4
357 Views
Last Modified: 2012-04-12
I've inherited some code part of which is to encrypt a string, and then it is saved to a file. See below.

The problem is that when the EURO € (and I presume some other characters) are included in string the are changed to a question mark ?


DES.Key = MD5.ComputeHash(System.Text.ASCIIEncoding.ASCII.GetBytes(key))
DES.Mode = CipherMode.ECB
Dim DESEncrypt As ICryptoTransform = DES.CreateEncryptor()
Dim Buffer As Byte() = System.Text.ASCIIEncoding.ASCII.GetBytes(stringToEncrypt)
Return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length))

I'd appreciate help on this as to how to avoid problem.  The fundamental of code can't really change as there are files already saved using this method

Thanks in advance
0
Comment
Question by:rwallacej
  • 2
  • 2
4 Comments
 
LVL 23

Expert Comment

by:wdosanjos
ID: 37823980
The problem with the System.Text.ASCIIEncoding.ASCII.GetBytes(), because the EURO € is not defined in the ASCII encoding.  You should use System.Text.Encoding.UTF8.GetBytes() instead.  You probably need to update your decrypt code to use System.Text.Encoding.UTF8.GetString() also.
0
 

Author Comment

by:rwallacej
ID: 37824223
thanks for help,

I changed encrypt code per your comments to
            DES.Key = MD5.ComputeHash(Encoding.UTF8.GetBytes(key))
            DES.Mode = CipherMode.ECB
            Dim DESEncrypt As ICryptoTransform = DES.CreateEncryptor()
            Dim Buffer As Byte() = ASCIIEncoding.UTF32.GetBytes(stringToEncrypt)
            Return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length))

the encrypted string is the now different.



I changed the decrypt code from what it was to
                DES.Key = MD5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(key))
                DES.Mode = CipherMode.ECB
                Dim DESDecrypt As Security.Cryptography.ICryptoTransform = DES.CreateDecryptor()
                Dim Buffer As Byte() = Convert.FromBase64String(encryptedString)
                Return ASCIIEncoding.ASCII.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length))

but this does not decrypt string right

further help appreciated, thanks
0
 
LVL 23

Accepted Solution

by:
wdosanjos earned 500 total points
ID: 37824259
Your code is still has ASCII encoding references.  Please try this:

Encrypt:
DES.Key = MD5.ComputeHash(Encoding.UTF8.GetBytes(key))
DES.Mode = CipherMode.ECB
Dim DESEncrypt As ICryptoTransform = DES.CreateEncryptor()
Dim Buffer As Byte() = Encoding.UTF8.GetBytes(stringToEncrypt)
Return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length))

Open in new window

Decrypt:
DES.Key = MD5.ComputeHash(System.Text.Encoding.UTF8.GetBytes(key))
DES.Mode = CipherMode.ECB
Dim DESDecrypt As Security.Cryptography.ICryptoTransform = DES.CreateDecryptor()
Dim Buffer As Byte() = Convert.FromBase64String(encryptedString)
Return Encoding.UTF8.GetString(DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length))

Open in new window

0
 

Author Closing Comment

by:rwallacej
ID: 37838965
Thanks
0

Featured Post

DevOps Toolchain Recommendations

Read this Gartner Research Note and discover how your IT organization can automate and optimize DevOps processes using a toolchain architecture.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

More often than not, we developers are confronted with a need: a need to make some kind of magic happen via code. Whether it is for a client, for the boss, or for our own personal projects, the need must be satisfied. Most of the time, the Framework…
Parsing a CSV file is a task that we are confronted with regularly, and although there are a vast number of means to do this, as a newbie, the field can be confusing and the tools can seem complex. A simple solution to parsing a customized CSV fi…
This Micro Tutorial will teach you how to censor certain areas of your screen. The example in this video will show a little boy's face being blurred. This will be demonstrated using Adobe Premiere Pro CS6.
A short tutorial showing how to set up an email signature in Outlook on the Web (previously known as OWA). For free email signatures designs, visit https://www.mail-signatures.com/articles/signature-templates/?sts=6651 If you want to manage em…

810 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question