C # HMAC для Java - PullRequest
       39

C # HMAC для Java

1 голос
/ 15 февраля 2011

Я делаю эквивалентный код Java для кода ниже.Но я могу сделать то, что возвращает тот же результат для encodedString .Какой класс Java можно использовать для достижения того же результата?

//Set the Hash method to SHA1
HMAC hash;
switch (validation)
{
    case MachineKeyValidation.MD5:
        hash = new HMACMD5();
        break;
    case MachineKeyValidation.SHA1:
    default:
        hash = new HMACSHA1();
        break;
}
//Get the hash validation key as an array of bytes
hash.Key = HexToByte(validationKey);
//Encode the password based on the hash key and
//converts the encrypted value into a string
encodedString = Convert.ToBase64String(hash.ComputeHash(Encoding.Unicode.GetBytes(password)));

Заранее спасибо!:)

Ответы [ 2 ]

2 голосов
/ 16 февраля 2011

Я нашел решение для кода перевода.Было две основные проблемы.При запросе HMACSHA1 я говорю не об алгоритме SHA1, а о HmacSHA1 .И есть разница между кодировкой от Java и C #.Я использовал правильный ключ и правильный алгоритм, но кодировка была другой.

SecretKeySpec signingKey = new SecretKeySpec(key, "HmacSHA1");
Mac mac = Mac.getInstance("HmacSHA1");
mac.init(signingKey);
// The big problem is difference between C# and Java encoding
byte[] rawHmac = mac.doFinal(data.getBytes("UTF-16LE"));
result = new String(Base64.encode(rawHmac));
...