Добрый день, помогите пожалуйста с кодом на C#
есть такая функция на PHP
public function getCode($secret,$time = null) {
if (!$time) {
$time = floor(time() / 30);
}
$base32 = new FixedBitNotation(5, 'ABCDEFGHIJKLMNOPQRSTUVWXYZ234567', TRUE, TRUE);
$secret = $base32->decode($secret);
$time = pack("N", $time);
$time = str_pad($time,8, chr(0), STR_PAD_LEFT);
$hash = hash_hmac('sha1',$time,$secret,true);
$offset = ord(substr($hash,-1));
$offset = $offset & 0xF;
$truncatedHash = self::hashToInt($hash, $offset) & 0x7FFFFFFF;
$pinValue = str_pad($truncatedHash % self::$PIN_MODULO,6,"0",STR_PAD_LEFT);;
return $pinValue;
}
protected function hashToInt($bytes, $start) {
$input = substr($bytes, $start, strlen($bytes) - $start);
$val2 = unpack("N",substr($input,0,4));
return $val2[1];
}
Откопал в сети её аналог на C# (.Net), но результаты выдаются другие
public static readonly DateTime UNIX_EPOCH = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
public static string GetPassword(string secret )
{
long counter = (long)((DateTime.UtcNow - UNIX_EPOCH).TotalSeconds ) / 30;
return GeneratePassword(secret, counter);
}
public static string GeneratePassword(string secret, long iterationNumber)
{
int digits = 6;
byte[] counter = BitConverter.GetBytes(iterationNumber);
if (BitConverter.IsLittleEndian)
Array.Reverse(counter);
byte[] key = Encoding.ASCII.GetBytes(secret);
HMACSHA1 hmac = new HMACSHA1(key, true);
byte[] hash = hmac.ComputeHash(counter);
int offset = hash[hash.Length - 1] & 0xf;
int binary =
((hash[offset] & 0x7f) << 24)
| ((hash[offset + 1] & 0xff) << 16)
| ((hash[offset + 2] & 0xff) << 8)
| (hash[offset + 3] & 0xff);
int password = binary % (int)Math.Pow(10, digits); // 6 digits
return password.ToString(new string('0', digits));
}
помогите найти ошибку,
Спасибо