Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在JAVA中实现.NET SHA1密码验证_Java_Asp.net_Hash_Passwords_Sha1 - Fatal编程技术网

在JAVA中实现.NET SHA1密码验证

在JAVA中实现.NET SHA1密码验证,java,asp.net,hash,passwords,sha1,Java,Asp.net,Hash,Passwords,Sha1,我需要帮助在Java1.6中实现密码身份验证功能,数据源于.NET 背景:在项目中,我们将数据从客户的旧系统迁移到新系统。部分数据是用户的散列密码和密码 所以我有一个哈希密码和一个salt,都是字符串 据该客户称,密码哈希是使用标准的.NET SHA1加密创建的 我发现了详细说明.NET功能的代码,包括base64等,但没有JAVA代码在给定salt和预期哈希的情况下验证密码 不用说,我的试验没有成功 你能帮忙吗 详细说明: 我需要一个函数“HashPasswordLiket”,它将为我完成以下

我需要帮助在Java1.6中实现密码身份验证功能,数据源于.NET

背景:在项目中,我们将数据从客户的旧系统迁移到新系统。部分数据是用户的散列密码和密码

所以我有一个哈希密码和一个salt,都是字符串

据该客户称,密码哈希是使用标准的.NET SHA1加密创建的

我发现了详细说明.NET功能的代码,包括base64等,但没有JAVA代码在给定salt和预期哈希的情况下验证密码

不用说,我的试验没有成功

你能帮忙吗

详细说明:

我需要一个函数“HashPasswordLiket”,它将为我完成以下操作:

String passwordHash = hashPasswordLikeNET( String cleartextPassword, String salt );
boolean isValid = passwordHash.equals( storedPasswordHash );
不需要为新密码生成新的哈希/salt-如果用户在新系统中更改其密码,将使用不同的算法对其进行编码,并随后根据该算法进行验证

当我明天回来工作时,我将添加一个客户提供的示例密码/salt/hash,以及迄今为止我的一段代码

谢谢

尼尔

================其他详细信息==============

我们的客户让我们导入他当前的用户群,包括密码。它们存储为散列/盐组合

因此,我需要能够根据存储的哈希值验证用户登录时输入的密码,使用JAVA实现的客户“算法”。根据客户的说法,该算法是“标准ASP.NET SHA1”

以下是我的例子:

密码:12345! 哈希:UDRc2nvL4AGLL90xOzxg4PT3oqA= 盐:NJC5qJDJ8kh73jrPO+Z0zg== 也就是说,我需要做一些魔术来在JAVA中创建password*salt=hash

到目前为止,我的代码是:

import org.apache.commons.codec.binary.Base64;

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import java.io.UnsupportedEncodingException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;


String createHashLikeNET( String password, String salt ) throws PasswordServiceException
{
    try
    {
        Mac sha1_HMAC = Mac.getInstance( "HmacSHA1" );
        sha1_HMAC.init( new SecretKeySpec( salt.getBytes( "UTF-8" ), "HmacSHA1" ) );

        byte[] hashedBytes = sha1_HMAC.doFinal( password.getBytes( "UTF-8" ) );

        return Base64.encodeBase64String( hashedBytes );
    }
    catch (NoSuchAlgorithmException e)
    {
        throw new PasswordServiceException(e);
    }
    catch (InvalidKeyException e)
    {
        throw new PasswordServiceException(e);
    }
    catch (UnsupportedEncodingException e)
    {
        throw new PasswordServiceException(e);
    }
}

public static void main(String[] args)
{
    String expectedHash = "UDRc2nvL4AGLL90xOzxg4PT3oqA=";
    String calculatedHash = createHashLikeNET( "12345!", "NJC5qJDJ8kh73jrPO+Z0zg==" );
    System.out.println( "Expected: " + expectedHash + ", result: " + calculatedHash );
}
不管我如何调整我的代码,我都没有得到所需的结果


另外,有人能验证客户给我的示例是否在.NET中有效吗?

呃,我不完全确定这里的问题是什么。MessageDigest可以创建哈希,默认情况下支持sha1,因此。。。你还需要什么呢?请提供更多的细节,比如你目前如何用C和Java进行哈希运算的例子。我最近遇到了这个问题,解决了我所有的加密难题。