Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/294.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和PYTHON中的SHA256加密产生不同的结果_Java_Python_Sha256 - Fatal编程技术网

JAVA和PYTHON中的SHA256加密产生不同的结果

JAVA和PYTHON中的SHA256加密产生不同的结果,java,python,sha256,Java,Python,Sha256,如果您能帮助我理解为什么我的JAVA和PYTHON中的SHA256加密函数不能产生结果(1位数的差异,PYTHON中还有一位数的差异),我将不胜感激: 要加密的哈希是:“ThisisTest” Java结果是:A7C96262C21DB9A06FD49E307D694FD95F624569F9B35BB3FFACD8804F9787 结果是: A7C96262C21DB9A06FD49E307D694FD95F624569F9B35BB3FFACD880400F9787 Python代码: im

如果您能帮助我理解为什么我的JAVA和PYTHON中的SHA256加密函数不能产生结果(1位数的差异,PYTHON中还有一位数的差异),我将不胜感激:

要加密的哈希是:“ThisisTest”
Java结果是:
A7C96262C21DB9A06FD49E307D694FD95F624569F9B35BB3FFACD8804F9787

结果是:
A7C96262C21DB9A06FD49E307D694FD95F624569F9B35BB3FFACD880400F9787

Python代码:

import hashlib

def encrypt_string(hash_string):
    sha_signature = \
        hashlib.sha256(hash_string.encode()).hexdigest()
    return sha_signature


hash_string = "thisisatest"
print(encrypt_string(hash_string), end="")
Java代码:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class OpenAPIPasswordEncryptor1 {


    private static MessageDigest sha256;

    // generated password is stored encrypted (using also user name for hashing)
    public synchronized static String encrypt(String hash) {
        try {

            StringBuilder builder = new StringBuilder();
            builder.append(hash);

            // first time , encrypt user name , password and static key
            String encryptedCredentials = encryptionIterator(builder.toString());
           return encryptedCredentials;
        } 

        catch (Exception e) {
            e.printStackTrace();
        }

        return "";
    }

    private static String encryptionIterator(String content) {
        try {
            sha256 = MessageDigest.getInstance("SHA-256");
            // append the static key to each iteration
            byte[] passBytes = (content).getBytes();
            sha256.reset();
            byte[] digested = sha256.digest(passBytes);
            StringBuffer sb = new StringBuffer();
            for (int i = 0; i < digested.length; i++) {
                sb.append(Integer.toHexString(0xff & digested[i]));
            }

            return sb.toString();
        } catch (NoSuchAlgorithmException ex) {
            ex.printStackTrace();
        }

        return "";
    }

    // generate password for developers
    public static void main(String[] args) {
        String hash = "thisisatest";
        String encrypt = encrypt(hash);
        System.out.println("Your Password Is '" + encrypt + "'");
    }
}
import java.security.MessageDigest;
导入java.security.NoSuchAlgorithmException;
公开类OpenAPIPasswordEncryptor1{
私有静态消息摘要sha256;
//生成的密码以加密方式存储(也使用用户名进行哈希)
公共同步静态字符串加密(字符串哈希){
试一试{
StringBuilder=新的StringBuilder();
builder.append(散列);
//第一次,加密用户名、密码和静态密钥
String encryptedCredentials=encryptionIterator(builder.toString());
返回加密凭证;
} 
捕获(例外e){
e、 printStackTrace();
}
返回“”;
}
私有静态字符串加密迭代器(字符串内容){
试一试{
sha256=MessageDigest.getInstance(“SHA-256”);
//将静态键附加到每个迭代中
字节[]passBytes=(内容).getBytes();
sha256.reset();
字节[]摘要=sha256.digest(passBytes);
StringBuffer sb=新的StringBuffer();
for(int i=0;i
问题在于,如果(无符号)字节值小于等于15,则前导零将丢失。作为快速解决方法,您可以使用以下方法:

sb.append(String.format("%02x", 0xff & digested[i]));
def encrypt_string(hash_string):
    sha_signature = hashlib.sha256(hash_string.encode()).digest()
    return "".join(["{:x}".format(b) for b in sha_signature])
尽管更高效的实现是可能的

要在Python中产生相同的错误,请使用以下命令:

sb.append(String.format("%02x", 0xff & digested[i]));
def encrypt_string(hash_string):
    sha_signature = hashlib.sha256(hash_string.encode()).digest()
    return "".join(["{:x}".format(b) for b in sha_signature])
问题是,如果(无符号)字节值小于等于15,则会删除前导零。作为快速解决方法,您可以使用以下方法:

sb.append(String.format("%02x", 0xff & digested[i]));
def encrypt_string(hash_string):
    sha_signature = hashlib.sha256(hash_string.encode()).digest()
    return "".join(["{:x}".format(b) for b in sha_signature])
尽管更高效的实现是可能的

要在Python中产生相同的错误,请使用以下命令:

sb.append(String.format("%02x", 0xff & digested[i]));
def encrypt_string(hash_string):
    sha_signature = hashlib.sha256(hash_string.encode()).digest()
    return "".join(["{:x}".format(b) for b in sha_signature])

不必相关,但在使用
String::getBytes
时,应始终指定编码。您的问题很难理解。你为什么把我的美化编辑搞得一团糟?@故意留白-因为某种原因在这里无法正确标记我的代码。。。不确定为什么SHA不是加密,请使用Internet了解加密和加密哈希之间的区别。不一定相关,但在使用
String::getBytes
时应始终指定编码。您的问题很难理解。你为什么把我的美化编辑搞得一团糟?@故意留白-因为某种原因在这里无法正确标记我的代码。。。不确定为什么YSHA不是加密,请使用Internet了解加密和加密哈希之间的区别。不幸的是,目前的答案是肯定的,遗留系统:(好的,我添加了一个bug的Python实现。谢谢你的帮助!很好的捕获!我也被绊倒了。不幸的是,目前的答案是肯定的,遗留系统:(好的,我添加了一个bug的Python实现。谢谢你的帮助!很好的捕获!我也被绊倒了。)。