Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/310.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 SecretFactory.GenerateCret:将字节[]转换为字符[]_Java_Arrays_Passwords_Sha256_Chararray - Fatal编程技术网

Java SecretFactory.GenerateCret:将字节[]转换为字符[]

Java SecretFactory.GenerateCret:将字节[]转换为字符[],java,arrays,passwords,sha256,chararray,Java,Arrays,Passwords,Sha256,Chararray,我已经试了两天来解决一个简单的问题。 我有一个加密密码的简单Python脚本。我想用Java重新编程 如果我传递一个最大为127的字节作为密码,那么两个脚本的结果是相同的。但是如果我输入128,则Java中的输出不匹配。 Python中的函数需要一个字节数组作为密码,Java需要一个字符数组 Python: import sys import hashlib import time if __name__ == "__main__": password = byte

我已经试了两天来解决一个简单的问题。 我有一个加密密码的简单Python脚本。我想用Java重新编程

如果我传递一个最大为127的字节作为密码,那么两个脚本的结果是相同的。但是如果我输入128,则Java中的输出不匹配。 Python中的函数需要一个字节数组作为密码,Java需要一个字符数组

Python:

import sys
import hashlib
import time

if __name__ == "__main__":
    password = bytearray([127])
    salt = bytearray([1])
    iter = 1;
    hash = hashlib.pbkdf2_hmac("sha256", password, salt, iter)
    print(f"hash: {hash.hex()}")
    # Output:
    # password = [127]: accfb75d59df0c5680ff6ed355f16449203447c839c84eb747b0857001dec922
    # password = [128]: 4a5fc7df8ca880cd30aeddd03180ba42c86198db706d020e41ecf6472e59e02f
import java.security.spec.KeySpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;

public class HelloWorld {

    public static String byteArrayToHex(byte[] a) {
         StringBuilder sb = new StringBuilder();
         for (byte b : a)
            sb.append(String.format("%02x", b & 0xff));
        return sb.toString();
    }  

    public static void main(String []args) throws Exception{
     
        SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
        char[] password = new char[]{(char) 127};
        byte[] salt = new byte[]{1};
        int iter = 1;
        int outputKeyLength = 256;
          
        KeySpec keySpec = new PBEKeySpec(password, salt, iter, outputKeyLength);
        SecretKey hash = secretKeyFactory.generateSecret(keySpec);
        System.out.println("hash = " + byteArrayToHex(hash.getEncoded()));
        // Output:
        // password = [127]: accfb75d59df0c5680ff6ed355f16449203447c839c84eb747b0857001dec922 **match**
        // password = [128]: 021d30f53b77d8b32a05d731f18e34e32385fd495fdc2e95ed73b7ab12b2bda9 **wrong**
    }
}
Java:

import sys
import hashlib
import time

if __name__ == "__main__":
    password = bytearray([127])
    salt = bytearray([1])
    iter = 1;
    hash = hashlib.pbkdf2_hmac("sha256", password, salt, iter)
    print(f"hash: {hash.hex()}")
    # Output:
    # password = [127]: accfb75d59df0c5680ff6ed355f16449203447c839c84eb747b0857001dec922
    # password = [128]: 4a5fc7df8ca880cd30aeddd03180ba42c86198db706d020e41ecf6472e59e02f
import java.security.spec.KeySpec;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;

public class HelloWorld {

    public static String byteArrayToHex(byte[] a) {
         StringBuilder sb = new StringBuilder();
         for (byte b : a)
            sb.append(String.format("%02x", b & 0xff));
        return sb.toString();
    }  

    public static void main(String []args) throws Exception{
     
        SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("PBKDF2WithHmacSHA256");
        char[] password = new char[]{(char) 127};
        byte[] salt = new byte[]{1};
        int iter = 1;
        int outputKeyLength = 256;
          
        KeySpec keySpec = new PBEKeySpec(password, salt, iter, outputKeyLength);
        SecretKey hash = secretKeyFactory.generateSecret(keySpec);
        System.out.println("hash = " + byteArrayToHex(hash.getEncoded()));
        // Output:
        // password = [127]: accfb75d59df0c5680ff6ed355f16449203447c839c84eb747b0857001dec922 **match**
        // password = [128]: 021d30f53b77d8b32a05d731f18e34e32385fd495fdc2e95ed73b7ab12b2bda9 **wrong**
    }
}