vb@rchiv
VB Classic
VB.NET
ADO.NET
VBA
C#
vb@rchiv Offline-Reader - exklusiv auf der vb@rchiv CD Vol.4  
 vb@rchiv Quick-Search: Suche startenErweiterte Suche starten   Impressum  | Datenschutz  | vb@rchiv CD Vol.6  | Shop Copyright ©2000-2025
 
zurück

 Sie sind aktuell nicht angemeldet.Funktionen: Einloggen  |  Neu registrieren  |  Suchen

VB.NET - Ein- und Umsteiger
Re: HMAC MD5 Prüfsumme 
Autor: ModeratorDaveS (Moderator)
Datum: 27.07.05 14:10

Hmm, es geht um die HMAC...es ist ehrlich gesagt ziemlich hirnrissig MD5 als Hexstring zurückzugeben und das wieder in Bytes umzuwandeln für die HMAC Berechnung. Das kannst du alles richtig auf binärer Ebene machen. Falls du etwas damit anfangen kannst hier ist eine HMACMD5 Klasse in C#, die ich geschrieben habe.

 
using System;
using System.Security.Cryptography;
using System.Diagnostics;
 
using DSNTS.BaseServices;
 
namespace DSNTS.EncryptionServices
{
	/// <summary>
	/// Summary description for HMACMD5.
	/// </summary>
	[CodeCategory("ES")]
	public sealed class HMACMD5 : KeyedHashAlgorithm
	{
		private const int md5BlockLength = 64;
		private HashAlgorithm _md5 = new MD5CryptoServiceProvider();
		private byte[] _key = null;
		private byte[] _kxipad = null;
		private byte[] _kxopad = null;
		private byte[] _td = null;
		private bool _initDone = false;
 
		public HMACMD5() : base()
		{
			init();
		}
 
		public HMACMD5(byte[] key) : base()
		{
			init();
			this.Key = key;
		}
 
		private void init()
		{
			_td = new byte[md5BlockLength];
			_kxipad = new byte[md5BlockLength];
			_kxopad = new byte[md5BlockLength];
		}
 
		protected override void HashCore(byte[] array, int ibStart, int cbSize)
		{
			checkDisposed();
			if (!_initDone) Initialize();
			while(cbSize>0)
			{
				int size = cbSize<=_td.Length?cbSize:_td.Length;
				_md5.TransformBlock(array, ibStart, size, _td, 0);
				cbSize -= size;
				ibStart += size;
			}
		}
 
		protected override byte[] HashFinal()
		{
			checkDisposed();
			_md5.TransformFinalBlock(_td, 0, 0);
			byte[] hv = _md5.Hash;
			_md5.Initialize();
			_md5.TransformBlock(_kxopad, 0, _kxopad.Length, _td, 0);
			_md5.TransformFinalBlock(hv, 0, hv.Length);
			_initDone = false;
			return _md5.Hash;
		}
 
		public override void Initialize()
		{
			checkDisposed();
			if (_key==null)
			{
				// Generate random key if none set
				RandomNumberGenerator rng = RandomNumberGenerator.Create();
				_key = new byte[md5BlockLength];
				rng.GetBytes(_key);
				initKey();
			}
 
			_md5.Initialize();
			_md5.TransformBlock(_kxipad, 0, _kxipad.Length, _td, 0);
			_initDone = true;
		}
 
		public override int HashSize
		{
			get
			{
				return 16*8;
			}
		}
 
		public override byte[] Key
		{
			get
			{
				return _key;
			}
			set
			{
				checkDisposed();
				if (State!=0)
					throw new CryptographicException("Hash key cannot be changed after the" & _
  "first write to the stream");
				_key = value;
				initKey();
				Initialize();
			}
		}
 
		private void initKey()
		{
			// Do the stuff to set up the new key
			KeyValue = _key;
			if (KeyValue.Length>md5BlockLength)
			{
				_md5.Initialize();
				KeyValue = _md5.ComputeHash(KeyValue, 0, KeyValue.Length);
			}
 
			for (int i=0; i<KeyValue.Length; i++) _kxipad[ i ] = KeyValue[ i ];
			for (int i=0; i<md5BlockLength; i++) _kxipad[ i ] ^= 0x36; 
 
			for (int i=0; i<KeyValue.Length; i++) _kxopad[ i ] = KeyValue[ i ];
			for (int i=0; i<md5BlockLength; i++) _kxopad[ i ] ^= 0x5C; 
		}
 
		public new static KeyedHashAlgorithm Create()
		{
			return new HMACMD5();
		}
 
		protected override void Dispose(bool disposing)
		{
			if (_md5!=null)
				_md5.Clear();
			_md5 = null;
		}
 
		private void checkDisposed()
		{
			if (_md5==null) throw new ObjectDisposedException(this.ToString());
		}
 
	} // class HMACMD5
}
Das funktioniert wie die anderen .Net KeyedHashAlgorithm Klassen.

________
Alle Angaben ohne Gewähr. Keine Haftung für Vorschläge, Tipps oder sonstige Hilfe, falls es schiefgeht, nur Zeit verschwendet oder man sonst nicht zufrieden ist

alle Nachrichten anzeigenGesamtübersicht  |  Zum Thema  |  Suchen

 ThemaViews  AutorDatum
HMAC MD5 Prüfsumme1.640GrisuChris27.07.05 13:14
Re: HMAC MD5 Prüfsumme917ModeratorDaveS27.07.05 13:33
Re: HMAC MD5 Prüfsumme730GrisuChris27.07.05 13:54
Re: HMAC MD5 Prüfsumme1.132ModeratorDaveS27.07.05 14:10
Re: HMAC MD5 Prüfsumme716GrisuChris27.07.05 16:08

Sie sind nicht angemeldet!
Um auf diesen Beitrag zu antworten oder neue Beiträge schreiben zu können, müssen Sie sich zunächst anmelden.

Einloggen  |  Neu registrieren

Funktionen:  Zum Thema  |  GesamtübersichtSuchen 

nach obenzurück
 
   

Copyright ©2000-2025 vb@rchiv Dieter Otter
Alle Rechte vorbehalten.
Microsoft, Windows und Visual Basic sind entweder eingetragene Marken oder Marken der Microsoft Corporation in den USA und/oder anderen Ländern. Weitere auf dieser Homepage aufgeführten Produkt- und Firmennamen können geschützte Marken ihrer jeweiligen Inhaber sein.

Diese Seiten wurden optimiert für eine Bildschirmauflösung von mind. 1280x1024 Pixel