Ich versuche, mit einem C# -Client in https://www.interactivebrokers.com/sso/Login einzuloggen. Es ist ein Schritt, der einen SHA1-Hash aus dem Benutzernamen & Passwort (https://www.interactivebrokers.com/sso/Templates/javascript/myxyz.js, Linie 203) beinhaltet die Schaffung:SHA1: Übersetzen von JavaScript-Implementierung in C#
innerHash = CalcSHA1(username + ":" + password);
Dies nennt (https://www.interactivebrokers.com/sso/Templates/javascript/sha1.js, Zeile 113)
calcSHA1Blks(str2blks_SHA1(str);
und str2blks_SHA1() ist definiert (https://www.interactivebrokers.com/sso/Templates/javascript/sha1.js, Zeile 28) als
/*
* Convert a string to a sequence of 16-word blocks, stored as an array.
* Append padding bits and the length, as described in the SHA1 standard.
*/
function str2blks_SHA1(str)
{
var nblk = ((str.length + 8) >> 6) + 1;
var blks = new Array(nblk * 16);
for(var i = 0; i < nblk * 16; i++) blks[i] = 0;
for(i = 0; i < str.length; i++)
blks[i >> 2] |= str.charCodeAt(i) << (24 - (i % 4) * 8);
blks[i >> 2] |= 0x80 << (24 - (i % 4) * 8);
blks[nblk * 16 - 1] = str.length * 8;
return blks;
}
ich bin nicht alles, was mit SHA1 Sachen vertraut, so kann ich nicht sagen, Wenn was in Str2blks_SHA1() ist, ist Standard Zeug, das automatisch in SHA1CryptoServiceProvider.ComputeHash() getan wird, oder wenn es etwas ist, was ich explizit tun muss. Ich habe versucht:
SHA1CryptoServiceProvider.ComputeHash(Encoding.UTF8.GetBytes(userName + ":" + password))
das gleiche Benutzername & Passwort in Javascript und in .net, und es scheint ein anderes Ergebnis zu erzeugen.
Dann habe ich versucht, diese Funktion str2blks_SHA1() zu C# portieren, aber ich verstehe nicht, wie man ein Array von Bytes (blks) (was SHA1CryptoServiceProvider.ComputeHash() erfordert), wie es scheint wie jedes Array-Element in blks könnte größer sein als ein Byte (nur bei str.length * 8)) ...
Also, gibt es bereits einige SHA1-Implementierung, die das Gleiche wie diese Javascript-Implementierung zur Verfügung stellt? Oder wenn ich das wirklich selbst implementieren muss, wie portiere ich str2blks_SHA1()?
Dank
Wenn möglich, sollten Sie niemals eigene kryptografische Routinen implementieren. Es gibt so viele mögliche Seitenkanalangriffe auf sie, dass Sie fast sicher sind, kryptografische Sicherheit zu verlieren. – templatetypedef