Toon posts:

[.NET]C#} iDEAL hash key

Pagina: 1
Acties:
  • 161 views sinds 30-01-2008
  • Reageer

Verwijderd

Topicstarter
Hoi,

Ik ben wat aan het vechten met het genereren van de iDEAL hash key in c# (visual studio 2005)

iDEAL verwacht deze hash key in een numeriek formaat. De source code die ik tot dus ver in elkaar gezet hebt zorg ervoor dat de key gegenereerd word in een byte[] array. Deze array is eventueel te converteren naar een string.

Waar ik nu dus naar op zoek ben is een manier om deze byte[] array of string om te zetten naar een numerieke string.
Gezien de lengte van de string is het niet mogelijk om deze simpelweg te converteren met int64.parse of System.BitConverter.ToInt64(hash,0). De Int64 is namelijk niet in staan om een dergelijk grote numerieke waarde op te slaan.

Ter verduidelijking. De hash code die iDEAL verwacht ziet er bijvoorbeeld zo uit:
“-221015769535004458061294222147088811820041496101“

Heeft iemand een idee hoe ik dit het beste aan kan pakken?


code:
1
2
3
4
5
6
7
        //Genereer de hashkey
        System.Text.ASCIIEncoding encoding = new System.Text.ASCIIEncoding();
        byte[] tokenbytes = encoding.GetBytes(IdealKey);

        SHA1Managed sha = new SHA1Managed();
        sha.Initialize();
        byte[] hash = sha.ComputeHash(tokenbytes);

Verwijderd

Gewoom met een for lusje de inhoud van die byte array in een string zetten.

Verwijderd

Topicstarter
Verwijderd schreef op zondag 10 december 2006 @ 18:30:
Gewoom met een for lusje de inhoud van die byte array in een string zetten.
En hoe bepaal je dan of de verkregen waarde negatief of positief is?

  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Na een hoop zelf geprutst te hebben ben ik toch maar op zoek gegaan naar een bestaande implementatie van een BigInteger-class. En hier kan je er een downloaden:

http://www.codeproject.com/csharp/biginteger.asp (eerst even registreren om de source te kunnen downloaden)

Deze moet als het goed is kunnen wat jij wilt.

  • gorgi_19
  • Registratie: Mei 2002
  • Laatst online: 18:39

gorgi_19

Kruimeltjes zijn weer op :9

Wat was er eigenlijk mis met de ToDouble methode? :)

Digitaal onderwijsmateriaal, leermateriaal voor hbo


  • MrBucket
  • Registratie: Juli 2003
  • Laatst online: 29-10-2022
Voorbeeldje, gebruikmakend van bovengenoemde BigInteger class:
C#:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
public static void Main(string[] args)
{
   byte[] bytes = new Byte[]{0xA8, 0x76, 0x42, 0x1F, 0xDD, 0xBC, 0x02, 0x32, 0xE9, 0x8F, 0x71, 0x21};
   BigInteger num = new BigInteger(bytes);
   BigInteger ten = new BigInteger(10);
   BigInteger zero = new BigInteger(0);
   string result = "";

   while(num > zero)
   {
      BigInteger remainder = num % ten;
      result = remainder.ToString() + result;

      num = num / ten;
   }

   Console.WriteLine(result);
   Console.WriteLine("\nPress enter.");
   Console.ReadLine();
}


--edit--
Veel efficienter is natuurlijk om niet door 10 te delen, maar door een miljard (past nog net in een int), en per miljard een ToString() te doen. Scheelt je een factor 9 aan delingen en modulo's :)

[ Voor 14% gewijzigd door MrBucket op 10-12-2006 20:30 ]


Verwijderd

Topicstarter
Thanx MrBucket

Dit werkt perfect! _/-\o_

Helaas genereerd mijn code echter een andere hash key dan de rabobank. Dus ik vermoed dat de string die ik wil hashen niet correct in elkaar steekt. Hierover ben ik al in contact met de rabobank, mocht ik daar niet uitkomen dan waag ik er nog wel een post aan hier op gathering.tweakers.net

consider thiz topic closed. ;)
Pagina: 1