C#HMAC到Java

我正在为下面的代码制作等效的java代码。但我可以创建一些返回encodeString相同结果的东西。我可以用什么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)));
提前致谢! :)     
已邀请:
我找到了翻译代码的解决方案。 有两个主要问题。当一个请求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));
    
请参阅有关在Java中计算哈希函数的问题。 并查看java.security.MessageDigest.getInstance(String algorithm)的javadoc。 编辑添加: 尝试运行以下应用以查看您注册的提供商。
import java.security.Provider;
import java.security.Security;

public class SecurityTest {

    public static void main(String[] args) {

        Provider[] providers = Security.getProviders();
        for (Provider p : providers) {
            System.out.println(p.toString());
        }
    }
}
您应该至少列出几个Sun提供商。如果没有,您可能需要下载一些安全库。     

要回复问题请先登录注册