You are not logged in.
Pages: 1
Hello,
I'm trying to make my client communicate with a .NET service. For this to work, i have to send some encrypted data across the wire. Currently i'm using a third party lib to encrpyt/decrypth data on my Delphi side and i'm trying to replace it with SynCrypto. However, i'm but lost... The .NET code looks similar to this simplified example:
private void button1_Click(object sender, EventArgs e)
{
// define the key
const string keyString = "12345678901234561234567890123456";
ASCIIEncoding encoding = new ASCIIEncoding();
Byte[] key = encoding.GetBytes(keyString);
// define the input
const string inputString = "1234567890123456";
Byte[] input = encoding.GetBytes(inputString);
// define the IV
const string ivString = "0000000000000000";
//System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
Byte[] iv = encoding.GetBytes(ivString);
// TODO: introduce Using statement
RijndaelManaged myAES = new RijndaelManaged
{
KeySize = 128,
BlockSize = 128,
Key = key,
//IV = iv,
Mode = CipherMode.ECB,
Padding = PaddingMode.Zeros
};
// Create an encryptor to perform the stream transform.
ICryptoTransform encryptor = myAES.CreateEncryptor(myAES.Key, myAES.IV);
// Define memory stream which will be used to hold encrypted data.
using (MemoryStream memoryStream = new MemoryStream())
{
// Define cryptographic stream (always use Write mode for encryption).
CryptoStream cryptoStream = new CryptoStream(memoryStream, encryptor, CryptoStreamMode.Write);
// Start encrypting.
cryptoStream.Write(input, 0, input.Length);
// Finish encrypting.
cryptoStream.FlushFinalBlock();
// Convert our encrypted data from a memory stream into a byte array.
byte[] cipherTextBytes = memoryStream.ToArray();
// Close both streams.
memoryStream.Close();
cryptoStream.Close();
// Convert encrypted data into a readable format.
//string cipherText = Convert.ToBase64String(cipherTextBytes);
string cipherText = BitConverter.ToString(cipherTextBytes);
// Return encrypted string.
textBox1.Text = cipherText;
}
}
As you can see, it is AES algorythm in ECB mode. You can ignore the IV as it is not used.
The question is: How, if possible, to make the AES implementation in SynCrypto to produce the same result as .NETs RijndaelManaged? I've checked with PHPs crypt and it worked OK, however all my tries with SynCrypto failed
Edit: the RijndaelManaged class supports PaddingMode of "None", "Zeros", "ANSIX923", "ISO10126" and "PKCS7"
Last edited by Julian (2011-09-07 19:33:24)
Offline
SynCrypto uses standard AES in ECB mode.
So it should be compatible with your source code.
Don't use AESFull* functions (this is a proprietary format for the remaining bytes), but the TAES object, with raw access to the data. Don't forget to pad your block with zeros.
Offline
Pages: 1