Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/298.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 类似于用于android密码登录的php的sha512_Java_Php_Android_Hash_Passwords - Fatal编程技术网

Java 类似于用于android密码登录的php的sha512

Java 类似于用于android密码登录的php的sha512,java,php,android,hash,passwords,Java,Php,Android,Hash,Passwords,我有我的php应用程序,当我创建用户时,我运行了这个 $random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true)); // Create salted password $userPwd = hash('sha512', $userPwd . $random_salt); 下一步,当我试图登录时,我已经捕获了密码,我通过这个javascript散列 p、 value=hex_sha512

我有我的php应用程序,当我创建用户时,我运行了这个

    $random_salt = hash('sha512', uniqid(mt_rand(1, mt_getrandmax()), true));
   // Create salted password 
    $userPwd = hash('sha512', $userPwd . $random_salt);
下一步,当我试图登录时,我已经捕获了密码,我通过这个javascript散列 p、 value=hex_sha512(userPwdControl.value)

然后在接下来的时间里

$hashPassword = hash('sha512', $userPassword . $row1['userSalt']);
以上所有代码都是通过php实现的

现在通过我的android,我想做这个函数p.value=hex_sha512(userPwdControl.value);为了得到散列,我首先通过java代码进行尝试,如下所示。但我得到了下面的空结果

StringBuffer stringBuffer = new StringBuffer();
         try {
                String message = "myPass";
                MessageDigest digest = MessageDigest.getInstance("512");
                byte[] hashedBytes = digest.digest(message.getBytes("UTF-8"));

                for (int i = 0; i < hashedBytes.length; i++) {
                    stringBuffer.append(Integer.toString((hashedBytes[i] & 0xff) + 0x100, 16)
                            .substring(1));
                }
                stringBuffer.toString();

            } catch (NoSuchAlgorithmException | UnsupportedEncodingException ex) {

            }
         System.out.println("TEST :"+stringBuffer);
StringBuffer StringBuffer=新的StringBuffer();
试一试{
String message=“myPass”;
MessageDigest=MessageDigest.getInstance(“512”);
byte[]hashedBytes=digest.digest(message.getBytes(“UTF-8”);
for(int i=0;i
你能试试下面的代码吗。在代码中做了一些小改动

        String resultString         =   "";
        try {
            byte[] buffer           =   password.getBytes();
            MessageDigest md        =   MessageDigest.getInstance("SHA-512");
            md.update(buffer);
            byte[] digest           =   md.digest();

            for(int i = 0 ; i < digest.length ; i++) {
                int b               =   digest[i] & 0xff;
                if(Integer.toHexString(b).length() == 1)
                    resultString    =   resultString + "0";
                resultString        =   resultString + Integer.toHexString(b);
            }
        } catch(NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
String resultString=”“;
试一试{
字节[]缓冲区=密码。getBytes();
MessageDigest md=MessageDigest.getInstance(“SHA-512”);
md.update(缓冲区);
字节[]摘要=md.digest();
for(int i=0;i
您的问题似乎已经解决,但我强烈建议您切换到更安全的哈希算法。单个SHA-512无法保护您的用户密码,因为它太快了(),因此很容易被强制使用


您需要的是具有成本因子的哈希函数,如BCrypt、PBKDF2或SCrypt。PHPs函数password_hash()目前实现了BCrypt,这是一个兼容的实现,您可以使用。

是的,它工作正常,我的错误在哪里?另一件事是我在为android flow做正确的事情吗?在创建MessageDigest实例时查看您的算法名称。还返回一个十六进制字符串并附加到缓冲区,您的缓冲区只是一个字符串。我可以在android中使用它登录我的数据库吗?我可以通过php登录数据库吗?谢谢,因为我对这个非常陌生,我将它标记为您的answer@marin那么你有什么最好的建议?如果我改变了这一点,那么所有的用户密码和盐也需要在数据库中改变吗?你建议什么功能最好?那么我会在java中为它找到一个兼容的函数吗?@user5313398-在您使用salted SHA-512的情况下,我会在您现有的哈希上使用BCrypt,有关更多详细信息,请参阅此。使用BCrypt还有一个优点,即不需要单独存储盐,只需确保字段足够大
varchar(255)
。链接的jBcrypt库是一个Java实现,应该与PHP兼容hashes@matin谢谢你的链接,我得到了另一个问题,我有两个部分,一个是使用php的web部件。然后我还有我的另一部分,即ios(swift 3)和android手机。既然我还没有开发我刚开始在android上开发的那部分,那么我以后会不会对ios产生问题?@user5313398-我很确定你可以找到ios的实现(BCrypt是一种众所周知的经验证的算法),但不幸的是,我对苹果世界并不熟悉,所以我不能推荐任何图书馆。那么你是在向你推荐Brcrpyt吗?我不太明白它的盐和沙512有什么不同?