×
INTELLIGENT WORK FORUMS
FOR COMPUTER PROFESSIONALS

Log In

Come Join Us!

Are you a
Computer / IT professional?
Join Tek-Tips Forums!
  • Talk With Other Members
  • Be Notified Of Responses
    To Your Posts
  • Keyword Search
  • One-Click Access To Your
    Favorite Forums
  • Automated Signatures
    On Your Posts
  • Best Of All, It's Free!
  • Students Click Here

*Tek-Tips's functionality depends on members receiving e-mail. By joining you are opting in to receive e-mail.

Posting Guidelines

Promoting, selling, recruiting, coursework and thesis posting is forbidden.

Students Click Here

Jobs

Covert String to Byte[]

Covert String to Byte[]

Covert String to Byte[]

(OP)
Dear All,
Please help this is driving me mad!
Thanks in advance :)

CODE --> c#

try
            {
                
                var emailAddr = "etpienaar@yahoo.com";
                byte[] emailAddrByteArr = new byte[emailAddr.Length];
                string[] emailAddStArr = new string[]{"e","t","p","i","e","n","a","a","r","@","y","a","h","o","o",".","c","o","m"};
                //string[] emailAddStArr = new string[emailAddr.Length];
                char[] emailCharArr = emailAddr.ToCharArray();
                

                for (int i = 0; i < emailAddr.Length; i++)
                {
                    //Console.WriteLine(emailCharArr[i]);
                    Console.WriteLine(emailAddStArr[i]);
                    emailAddrByteArr[i] =  byte.Parse(emailAddStArr[i]);

                } 
I get the following error:
[error]
Input string was not in a correct format.
[/error]
I have also tried the following:

CODE --> c#

//emailAddrByteArr = Array.ConvertAll(emailAddStArr, s => Convert.ToByte(s, 8));
                
                //emailAddrByteArr = Encoding.ASCII.GetBytes(emailAddr);
                //Encoding srcEncoding = Encoding.Unicode;
                //Encoding dstEncoding = Encoding.UTF8;
                //emailAddrByteArr = Encoding.Convert(srcEncoding,dstEncoding,emailAddrByteArr); 

Please help, thanks.

Thank you,

Kind regards

Triacona

RE: Covert String to Byte[]

Hi Triacona,

I think you are overcomplicating things.
A string already _is_ a character array. No need to define a string array first and then trying to convert to char array.

All you need to do is something along the line of this:

CODE

var emailAddrByteArr = System.Text.Encoding.Unicode.GetBytes(emailAddr); 

Best,
MakeItSo

"Knowledge is power. Information is liberating. Education is the premise of progress, in every society, in every family." (Kofi Annan)
Oppose SOPA, PIPA, ACTA; measures to curb freedom of information under whatever name whatsoever.

RE: Covert String to Byte[]

(OP)
Thanks MakeItSo.
I will give that a go...

Thank you,

Kind regards

Triacona

RE: Covert String to Byte[]

(OP)
Hi MakeItSo,

I have tried that and I get the following error :

Quote (Error)

Length of the data to decrypt is invalid.
Basically here is all the code:
It is to encrypt an object

CODE --> c#

#region Symemetrically Encrypting Data and Decrypting Data
            //
            #region Encrypt and Decrypt using AesManaged Class
            //
            #region Create an Rfc2898DeriveBytes object passing password and salt into constructor
            //
            var password = "Pa$$w0rd";
            var salt = "S@lt";
            var rfcDevBytes = new Rfc2898DeriveBytes(password, Encoding.Unicode.GetBytes(salt));
            //
            #endregion Create an Rfc2898DeriveBytes object passing password and salt into constructor
            //
            #region Create Instance of AesManaged class ( encryption class )
            var aesManAlgorithm = new AesManaged();
            #endregion Create Instance of AesManaged class ( encryption class )
            //
            #region Generate Secret Key and IV from Rfc2898DeriveBytes object using algoirthm's key size
            //
            var rfcDevBytesKey = rfcDevBytes.GetBytes(aesManAlgorithm.KeySize / 8);
            var rfcDevcBytesIv = rfcDevBytes.GetBytes(aesManAlgorithm.BlockSize / 8);
 #endregion Generate Secret Key and IV from Rfc2898DeriveBytes object using algoirthm's key size
            //
            #region Create MemoryStream object ( instance of ) used to buffer encrypted or unencrypted bytes
            //
            MemoryStream memStream = new MemoryStream();
            //
            #endregion Create MemoryStream object ( instance of ) used to buffer encrypted or unencrypted bytes
            //
            #region Create Encryptor and Decryptor objects, accepting the secret key and IV as parameters
            // create encryptor object
            var algorithm = aesManAlgorithm.CreateEncryptor(rfcDevBytesKey, rfcDevcBytesIv);
            algorithm = aesManAlgorithm.CreateDecryptor(rfcDevBytesKey, rfcDevcBytesIv);
            var cryptoStream = new CryptoStream(memStream, algorithm, CryptoStreamMode.Write);
            try
            {
                
                var emailAddr = "etpienaar@yahoo.com";                
                var emailAddrByteArr = Encoding.Unicode.GetBytes(emailAddr);
                var bytesToTransform = emailAddrByteArr;
                cryptoStream.Write(bytesToTransform, 0, bytesToTransform.Length);
                cryptoStream.FlushFinalBlock();
                cryptoStream.Close();
                memStream.Close();

                #endregion Invoke Close Mehtod on CryptoStream and MemoryStream objects

            }
            catch (Exception ex)
            {

                Console.WriteLine(ex.Message);
            } 

Thanks for your help smile

Thank you,

Kind regards

Triacona

RE: Covert String to Byte[]

(OP)
I tried it with a smaller string i.e. 8 bit ( chars ?)
etpienaa
and it gives me the following error:

Quote (error)

Padding is invalid and cannot be removed.

Thank you,

Kind regards

Triacona

RE: Covert String to Byte[]

Getting Bytes and encrypting/decrypting are two different things.
The decryption method expects a Base64 string of encrypted data. Base64 strings are always the length of a multiple of 4, with "=" used as padding for the end of the string, if required. This is what your two error messages say: a) not a multiple of 4, b) not padded with "=".
Next error would be "not a valid Base64 string", probably.

For instance, this is how I encrypt a string (wrote this almost four years ago, so could probably be optimized... blllttt):

CODE

string encText = Encrypt(myText, secret); 
With my Encrypt method looking like this (the one that is called directly is the second Encrypt(), the byte[] in pdb is a sample salt):

CODE

private static byte[] Encrypt(byte[] clearText, byte[] Key, byte[] IV)
        {
            MemoryStream ms = new MemoryStream();
            Rijndael alg = Rijndael.Create();
            alg.Key = Key;
            alg.IV = IV;
            CryptoStream cs = new CryptoStream(ms, alg.CreateEncryptor(), CryptoStreamMode.Write);
            cs.Write(clearText, 0, clearText.Length);
            cs.Close();
            byte[] encryptedData = ms.ToArray();
            return encryptedData;
        }

        public static string Encrypt(string clearText, string Password)
        {
            byte[] clearBytes = System.Text.Encoding.Unicode.GetBytes(clearText);
            PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd });
            byte[] encryptedData = Encrypt(clearBytes, pdb.GetBytes(32), pdb.GetBytes(16));
            return Convert.ToBase64String(encryptedData);
        } 

In the same fashion, I decrypt encrypted strings like this:

CODE

string clearText = Decrypt(base64Text, secret); 

Again, calling the second Decrypt() directly:

CODE

private static byte[] Decrypt(byte[] cipherData, byte[] Key, byte[] IV)
        {
            MemoryStream ms = new MemoryStream();
            Rijndael alg = Rijndael.Create();
            alg.Key = Key;
            alg.IV = IV;
            CryptoStream cs = new CryptoStream(ms, alg.CreateDecryptor(), CryptoStreamMode.Write);
            cs.Write(cipherData, 0, cipherData.Length);
            cs.Close();
            byte[] decryptedData = ms.ToArray();
            return decryptedData;
        }

        public static string Decrypt(string cipherText, string Password)
        {
            try
            {
                int mod4 = cipherText.Length % 4;
                if (mod4 > 0)
                {
                    cipherText += new string('=', 4 - mod4);
                }
                byte[] cipherBytes = Convert.FromBase64String(cipherText);
                PasswordDeriveBytes pdb = new PasswordDeriveBytes(Password, new byte[] { 0x11, 0x22, 0x33, 0x44, 0x55, 0x66, 0x77, 0x88, 0x99, 0xaa, 0xbb, 0xcc, 0xdd });
                byte[] decryptedData = Decrypt(cipherBytes, pdb.GetBytes(32), pdb.GetBytes(16));
                return System.Text.Encoding.Unicode.GetString(decryptedData);
            }
            catch
            {
                return "";
            }
        } 

You'll need using System.Security.Cryptography;

Encryption is not trivial but totally worth - if done properly. :)

Best,
MakeItSo

"Knowledge is power. Information is liberating. Education is the premise of progress, in every society, in every family." (Kofi Annan)
Oppose SOPA, PIPA, ACTA; measures to curb freedom of information under whatever name whatsoever.

RE: Covert String to Byte[]

(OP)
Thank you so much bigsmile for all your effort.
The blasted text book I am trying to teach myself out of is really bad, with a load of mistakes ( MS Cert 20483, 2013 version ).
I will try this out with the information you have provided.
Thanks again.

Thank you,

Kind regards

Triacona

RE: Covert String to Byte[]

Alrighty.
The accepted answer from here (currently 511 votes) is a very good example, also with a link to a sample solution etc.:
https://stackoverflow.com/questions/10168240/encry...
That being said, my above code snippet should already get you started.

"Knowledge is power. Information is liberating. Education is the premise of progress, in every society, in every family." (Kofi Annan)
Oppose SOPA, PIPA, ACTA; measures to curb freedom of information under whatever name whatsoever.

RE: Covert String to Byte[]

Did you get it to work?

"Knowledge is power. Information is liberating. Education is the premise of progress, in every society, in every family." (Kofi Annan)
Oppose SOPA, PIPA, ACTA; measures to curb freedom of information under whatever name whatsoever.

RE: Covert String to Byte[]

(OP)
Thanks for all your help 2thumbsup
Not yet, I have been really busy at work.
I will give it a go over the next few days
Thanks smile

Thank you,

Kind regards

Triacona

RE: Covert String to Byte[]

(OP)
MakeItSo, I fixed it smile
See below:

CODE --> c#

#region Symemetrically Encrypting Data and Decrypting Data
             //
             #region Encrypt and Decrypt using AesManaged Class
             //
             #region Create an Rfc2898DeriveBytes object passing password and salt into constructor
             //
             string password = "Pa$$w0rd";
             //byte[] salt = "S@lt";//new byte[] { 'S', '@', 'l', 't', '1', '0', '7', '8' }; // this is where it has gone wrong convert to byte array
             var salt = "S@lt";
             var rfcDerBytes = new Rfc2898DeriveBytes(password, Encoding.Unicode.GetBytes(salt));  //Encoding.UTF8.GetBytes(salt));//Encoding.Unicode.GetBytes(salt)); 
             //
             #endregion Create an Rfc2898DeriveBytes object passing password and salt into constructor
             //
             #region Create Instance of AesManaged class ( encryption class )
             AesManaged aesManAlgorithm = new AesManaged();
             #endregion Create Instance of AesManaged class ( encryption class )
             //
             #region Generate Secret Key and IV from Rfc2898DeriveBytes object using algoirthm's key size
             //
             byte[] rfcDevBytesKey = rfcDerBytes.GetBytes(aesManAlgorithm.KeySize / 8); // aesManAlg.Key check...
             //
             #region foreach to check what's in the key // commented out
             //Console.WriteLine("===================RgbKey====================");
             //foreach (var item in rfcDevBytesKey)
             //{
             //    Console.Write("{0}, ",item); 
             //}
             //Console.WriteLine();           
             #endregion foreach to check what's in the key
             //
             byte[] rfcDevcBytesIv = rfcDerBytes.GetBytes(aesManAlgorithm.BlockSize / 8); // should be byte[] as per demo
             //
             #region foreach to check what's in the IV // commented out
             //Console.WriteLine("===================RgbIV===================="); 
             //foreach (var item in rfcDevcBytesIv)
             //{
             //    Console.Write("{0}, ",item);
             //}
             //Console.WriteLine(); 
             #endregion foreach to check what's in the IV
             //
             #endregion Generate Secret Key and IV from Rfc2898DeriveBytes object using algoirthm's key size
             //
             #region Create MemoryStream object ( instance of ) used to buffer encrypted or unencrypted bytes
             //
             MemoryStream memStream = new MemoryStream();
             //
             #endregion Create MemoryStream object ( instance of ) used to buffer encrypted or unencrypted bytes
             //
             #region Create Encryptor and Decryptor objects, accepting the secret key and IV as parameters
             // create encryptor object
             // var algorithmEncrypt = aesManAlgorithm.CreateEncryptor(rgbKey, rgbIv);
             ICryptoTransform transformer = aesManAlgorithm.CreateEncryptor(rfcDevBytesKey, rfcDevcBytesIv);
             //
             #region Create Decryptor when need to decrypt not now book shows 2 different instances
             // create decryptor object
             // var algorithmDecrypt = aesManAlgorithm.CreateDecryptor(rgbKey, rgbIv);
             // algorithm = aesManAlgorithm.CreateDecryptor(rfcDevBytesKey, rfcDevcBytesIv); 
             #endregion
             //
             #endregion Create Encryptor and Decryptor objects, accepting the secret key and IV as parameters
             //
             #region Create CryptoStream object ( instance ) passing bufferStream object, algorithm object and stream mode as parameters
             //
             var cryptoStream = new CryptoStream(memStream, transformer, CryptoStreamMode.Write);
             //
             #endregion Create CryptoStream object ( instance ) passing bufferStream object, algorithm object and stream mode as parameters
             //
             #region Invoke Write and FlushFinalBlock methods on CryptoStream object
             //
             try
             {

                 var emailAddr = "etpienaa";
                 var emailAddrByteArr = Encoding.UTF8.GetBytes(emailAddr);//Encoding.Unicode.GetBytes(emailAddr);

                 #region Attempts at trying to convert to byte array commented out
                 //byte[] emailAddrByteArr = new byte[emailAddr.Length];
                 //string[] emailAddStArr = new string[]{"e","t","p","i","e","n","a","a","r","@","y","a","h","o","o",".","c","o","m"};
                 //string[] emailAddStArr = new string[emailAddr.Length];
                 //char[] emailCharArr = emailAddr.ToCharArray();

                 //for (int i = 0; i < emailAddr.Length; i++)
                 //{
                 //    //Console.WriteLine(emailCharArr[i]);
                 //    Console.WriteLine(emailAddStArr[i]);
                 //    emailAddrByteArr[i] =  byte.Parse(emailAddStArr[i]);

                 //}

                 //Encoding.Unicode.GetBytes()
                 //emailAddrByteArr = Array.ConvertAll(emailAddStArr, s => Convert.ToByte(s, 8));

                 //emailAddrByteArr = Encoding.ASCII.GetBytes(emailAddr);
                 //Encoding srcEncoding = Encoding.Unicode;
                 //Encoding dstEncoding = Encoding.UTF8;
                 //emailAddrByteArr = Encoding.Convert(srcEncoding,dstEncoding,emailAddrByteArr); 
                 #endregion Attempts at trying to convert to byte array

                 #region Other attempts to provide a correct result commented out
                 //emailAddrByteArr = emailAddStArr.Select(s => byte.Parse(s)).ToArray();
                 //emailAddrByteArr = emailAddStArr.Select(s => Byte.Parse(s)).ToArray();
                 //emailAddrByteArr = Array.ConvertAll(emailAddStArr, s => Byte.Parse(s, NumberStyles.HexNumber));


                 //for (int j = 0; j < emailAddr.Length; j++)
                 //{
                 //    emailAddrByteArr[j] = Convert.ToByte(emailAddStArr[j],2);
                 //}

                 //for (int i = 0; i < emailAddr.Length; i++)
                 //{
                 //    emailAddStArr[i] = emailAddr[i].ToString();
                 //}

                 //for (int k = 0; k < emailCharArr.Length; k++)
                 //{
                 //    emailAddStArr[k] = emailCharArr[k].ToString();
                 //}

                 //for (int m = 0; m < emailAddStArr.Length; m++)
                 //{
                 //   // emailAddrByteArr[m] = byte.Parse(emailAddStArr[m].ToString(), NumberStyles.Any); // // doesn't work
                 //    emailAddrByteArr[m] = byte.Parse(emailAddStArr[m], NumberStyles.Any);
                 //    //emailAddrByteArr[m] = emailAddStArr[m];

                 //    //emailAddrByteArr[m] = byte.Parse(emailCharArr[m].ToString(),NumberStyles.HexNumber);
                 //}

                 //int j = 0;
                 //foreach (var item in emailAddStArr)
                 //{
                 //    emailAddrByteArr[j++] = byte.Parse(item);
                 //}

                 //for (int l = 0; l < emailAddStArr.Length; l++)
                 //{
                 //    emailAddrByteArr[l] = byte.Parse(emailAddStArr[l]); 
                 //} // does not work either!!



                 //DeveloperInfo devInfo = new DeveloperInfo(emailAddrByteArr, 1);
                 //foreach (var item in emailAddrByteArr)
                 //{
                 //    Console.WriteLine(item);
                 //}


                 //var bytesToTransform = devInfo.EmailAddress; 
                 #endregion Other attempts to provide a correct result

                 byte[] bytesToTransform = emailAddrByteArr;
                 cryptoStream.Write(bytesToTransform, 0, bytesToTransform.Length);
                 cryptoStream.FlushFinalBlock();
                 byte[] transformedBytes = memStream.ToArray();
                 #region Invoke Close Method on CryptoStream and MemoryStream objects
                 
                 cryptoStream.Close();
                 memStream.Close();

                 for (int i = 0; i < transformedBytes.Length; i++)
                 {
                     Console.WriteLine(transformedBytes[i]);
                 }
                 
                 
                 #endregion Invoke Close Method on CryptoStream and MemoryStream objects




             }
             catch (Exception ex)
             {

                 Console.WriteLine(ex.Message);
             } 

Thanks for all your help thumbsup

Thank you,

Kind regards

Triacona

Red Flag This Post

Please let us know here why this post is inappropriate. Reasons such as off-topic, duplicates, flames, illegal, vulgar, or students posting their homework.

Red Flag Submitted

Thank you for helping keep Tek-Tips Forums free from inappropriate posts.
The Tek-Tips staff will check this out and take appropriate action.

Reply To This Thread

Posting in the Tek-Tips forums is a member-only feature.

Click Here to join Tek-Tips and talk with other members!

Close Box

Join Tek-Tips® Today!

Join your peers on the Internet's largest technical computer professional community.
It's easy to join and it's free.

Here's Why Members Love Tek-Tips Forums:

Register now while it's still free!

Already a member? Close this window and log in.

Join Us             Close