mail-archives/mono-list/2003-October/016105.html

244 строки
7.3 KiB
HTML
Исходник Постоянная ссылка Ответственный История

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 3.2//EN">
<HTML>
<HEAD>
<TITLE> [Mono-list] TripleDES differences between Mono 0.28 &amp; .NET
</TITLE>
<LINK REL="Index" HREF="index.html" >
<LINK REL="made" HREF="mailto:carlosga%40telefonica.net">
<META NAME="robots" CONTENT="index,nofollow">
<LINK REL="Previous" HREF="016108.html">
<LINK REL="Next" HREF="016119.html">
</HEAD>
<BODY BGCOLOR="#ffffff">
<H1>[Mono-list] TripleDES differences between Mono 0.28 &amp; .NET
</H1>
<B>Carlos Guzman Alvarez
</B>
<A HREF="mailto:carlosga%40telefonica.net"
TITLE="[Mono-list] TripleDES differences between Mono 0.28 &amp; .NET">carlosga@telefonica.net
</A><BR>
<I>Fri, 03 Oct 2003 12:55:48 +0200</I>
<P><UL>
<LI> Previous message: <A HREF="016108.html">[Mono-list] Re: some ideas about XSP
</A></li>
<LI> Next message: <A HREF="016119.html">[Mono-list] TripleDES differences between Mono 0.28 &amp; .NET
</A></li>
<LI> <B>Messages sorted by:</B>
<a href="date.html#16105">[ date ]</a>
<a href="thread.html#16105">[ thread ]</a>
<a href="subject.html#16105">[ subject ]</a>
<a href="author.html#16105">[ author ]</a>
</LI>
</UL>
<HR>
<!--beginarticle-->
<PRE>This is a multi-part message in MIME format.
--------------010902020401050107080404
Content-Type: text/plain; charset=ISO-8859-1; format=flowed
Content-Transfer-Encoding: 8bit
Hello:
I have made a little test case for test TripleDES using mono &amp; ms.net
and there are differences in the results.
The test case is based on a piece of code from my TLS Library ( that as
i said some time ago is working well under Windows with MS.NET but not
with Mono on Linux ):
Output of the test case using MS.NET:
9c99568e753e02955b5c468bcff82721535f3dd81695823d889b9a47da979086500e48eee79b2541
1400000cb58608e6b94b1381658e76be
2a94e53ab9f99a839d4fb0a88f470076050a5f08
Output of the Test case using Mono 0.28 (Windows)
9c99568e753e02955b5c468bcff82721535f3dd81695823d889b9a47da9790868f3e78b6ef624695
1400000cb58608e6b94b1381
658e76be2a94e53ab9f99a839d4fb0a88f470076
Output of the Test case using Mono 0.28 (Linux Red Hat 8)
9c99568e753e02955b5c468bcff82721535f3dd81695823d889b9a47da9790868f3e78b6ef624695
1400000cb58608e6b94b1381
658e76be2a94e53ab9f99a839d4fb0a88f470076
Output of the case using the exe built with mono 0.28 and the MS .NET
runtime ( runnig test.exe directly in the console seems to be using the
MS.NET framework )
9c99568e753e02955b5c468bcff82721535f3dd81695823d889b9a47da979086500e48eee79b2541
1400000cb58608e6b94b1381658e76be
2a94e53ab9f99a839d4fb0a88f470076050a5f08
If anybody can confirm this i will fill a bug report in mono bugzilla.
The test case source code is attached to this email.
--
Best regards
Carlos Guzm<7A>n <20>lvarez
Vigo-Spain
&quot;Todos somos muy ignorantes. Lo que ocurre es que no todos ignoramos las
mismas cosas.&quot;
Albert Einstein.
--------------010902020401050107080404
Content-Type: text/plain;
name=&quot;TripleDESTest.cs&quot;
Content-Transfer-Encoding: 7bit
Content-Disposition: inline;
filename=&quot;TripleDESTest.cs&quot;
using System;
using System.IO;
using System.Security.Cryptography;
namespace TripleDESTest
{
class TripleDES
{
[STAThread]
static void Main(string[] args)
{
byte blockSize = 8;
string algName = &quot;3DES&quot;;
byte keyMaterialSize = 24;
byte hashSize = 20;
CipherMode cipherMode = CipherMode.CBC;
SymmetricAlgorithm encryptionAlgorithm = SymmetricAlgorithm.Create(algName);
// Configure encrypt algorithm
encryptionAlgorithm.Mode = cipherMode;
encryptionAlgorithm.Padding = PaddingMode.PKCS7;
encryptionAlgorithm.KeySize = keyMaterialSize * 8;
encryptionAlgorithm.BlockSize = blockSize * 8;
byte[] clientWriteKey = new byte[]{161, 54, 179, 213, 89, 75, 130, 4, 186, 99, 158, 127, 19, 195, 175, 143, 79, 109, 25, 202, 237, 235, 62, 170};
byte[] clientWriteIV = new byte[]{193, 227, 54, 132, 68, 172, 55, 91};
// Set the key and IV for the algorithm
encryptionAlgorithm.Key = clientWriteKey;
encryptionAlgorithm.IV = clientWriteIV;
// Create encryption cipher
ICryptoTransform encryptionCipher = encryptionAlgorithm.CreateEncryptor();
byte[] fragment = new byte[]{20, 0, 0, 12, 181, 134, 8, 230, 185, 75, 19, 129, 101, 142, 118, 190};
byte[] mac = new byte[]{42, 148, 229, 58, 185, 249, 154, 131, 157, 79, 176, 168, 143, 71, 0, 118, 5, 10, 95, 8};
// Encryption ( fragment + mac [+ padding + padding_length] )
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, encryptionCipher, CryptoStreamMode.Write);
cs.Write(fragment, 0, fragment.Length);
cs.Write(mac, 0, mac.Length);
if (cipherMode == CipherMode.CBC)
{
// Calculate padding_length
int fragmentLength = fragment.Length + mac.Length + 1;
int padding = (((fragmentLength/blockSize)*8) + blockSize) - fragmentLength;
// Write padding length byte
cs.WriteByte((byte)padding);
}
cs.Close();
// Show result
TripleDES.Print(ms.ToArray());
// Now decrypt result
// Create decryption cipher
encryptionAlgorithm.Padding = PaddingMode.None;
ICryptoTransform decryptionCipher = encryptionAlgorithm.CreateDecryptor();
int fragmentSize = 0;
int paddingLength = 0;
byte[] ecrFragment = ms.ToArray();
// Decrypt message fragment ( fragment + mac [+ padding + padding_length] )
byte[] buffer = new byte[ecrFragment.Length];
decryptionCipher.TransformBlock(ecrFragment, 0, ecrFragment.Length, buffer, 0);
// Calculate fragment size
if (cipherMode == CipherMode.CBC)
{
// Calculate padding_length
paddingLength = buffer[buffer.Length - 1];
for (int i = (buffer.Length - 1); i &gt; (buffer.Length - (paddingLength + 1)); i--)
{
if (buffer[i] != paddingLength)
{
paddingLength = 0;
break;
}
}
fragmentSize = (buffer.Length - (paddingLength + 1)) - hashSize;
}
else
{
fragmentSize = buffer.Length - hashSize;
}
byte[] dcrFragment = new byte[fragmentSize];
byte[] dcrMAC = new byte[hashSize];
Buffer.BlockCopy(buffer, 0, dcrFragment, 0, dcrFragment.Length);
Buffer.BlockCopy(buffer, dcrFragment.Length, dcrMAC, 0, dcrMAC.Length);
TripleDES.Print(dcrFragment);
TripleDES.Print(dcrMAC);
Console.WriteLine(&quot;Pulse una tecla para continuar....&quot;);
Console.ReadLine();
}
public static void Print(byte[] content)
{
for (int i = 0; i &lt; content.Length; i++)
{
Console.Write(&quot;{0}&quot;, content[i].ToString(&quot;x2&quot;));
}
Console.WriteLine();
}
}
}
--------------010902020401050107080404--
</PRE>
<!--endarticle-->
<HR>
<P><UL>
<!--threads-->
<LI> Previous message: <A HREF="016108.html">[Mono-list] Re: some ideas about XSP
</A></li>
<LI> Next message: <A HREF="016119.html">[Mono-list] TripleDES differences between Mono 0.28 &amp; .NET
</A></li>
<LI> <B>Messages sorted by:</B>
<a href="date.html#16105">[ date ]</a>
<a href="thread.html#16105">[ thread ]</a>
<a href="subject.html#16105">[ subject ]</a>
<a href="author.html#16105">[ author ]</a>
</LI>
</UL>
</body></html>