Go Premium for a chance to win a PS4. Enter to Win

x
?
Solved

Encrypting a string and the Euro € character

Posted on 2012-04-09
4
Medium Priority
?
370 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 2000 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

[Webinar] Cloud Security

In this webinar you will learn:

-Why existing firewall and DMZ architectures are not suited for securing cloud applications
-How to make your enterprise “Cloud Ready”, and fix your aging DMZ architecture
-How to transform your enterprise and become a Cloud Enabler

Question has a verified solution.

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

The ECB site provides FX rates for major currencies since its inception in 1999 in the form of an XML feed. The files have the following format (reducted for brevity) (CODE) There are three files available HERE (http://www.ecb.europa.eu/stats/exch…
Performance in games development is paramount: every microsecond counts to be able to do everything in less than 33ms (aiming at 16ms). C# foreach statement is one of the worst performance killers, and here I explain why.
Exchange organizations may use the Journaling Agent of the Transport Service to archive messages going through Exchange. However, if the Transport Service is integrated with some email content management application (such as an anti-spam), the admin…
Please read the paragraph below before following the instructions in the video — there are important caveats in the paragraph that I did not mention in the video. If your PaperPort 12 or PaperPort 14 is failing to start, or crashing, or hanging, …

972 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