Java 计算SHA 256时出错

Java 计算SHA 256时出错,java,hash,sha256,Java,Hash,Sha256,我需要计算密码的SHA 256 我已经知道我可以使用apache的通用编解码器,但在我工作的地方这是不允许的 我尝试使用一个简单的函数从纯文本返回sha 256,即: public static String getSHA1(String plainText) { MessageDigest md; try { md = MessageDigest.getInstance("SHA-256"); md.update

我需要计算密码的SHA 256

我已经知道我可以使用apache的通用编解码器,但在我工作的地方这是不允许的 我尝试使用一个简单的函数从纯文本返回sha 256,即:

public static String getSHA1(String plainText) {
        MessageDigest md;
        try {
            md = MessageDigest.getInstance("SHA-256");

            md.update(plainText.getBytes());
            StringBuffer hexString = new StringBuffer();
            for (int i = 0; i < md.digest().length; i++) {
                hexString.append(Integer.toHexString(0xFF & md.digest()[i]));
            }
            return hexString.toString();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
        return null;
    }
我可以使用此网站在线计算sha 256

但我需要从我的代码中计算出来


非常感谢您的帮助。

来自Javadoc for
摘要()

通过执行最后的操作(如填充)完成哈希计算拨打此电话后,将重置摘要。

调用
digest()
一次,并将结果放入变量中


(顺便说一句,如果您搜索了摘要,无论何时获得固定结果,这都是一个好主意,您会发现这是空字符串的SHA-256摘要。)

亲爱的chrylis先生,谢谢您的回答,请检查我的代码。我正在循环中使用
digest()
。@user3110137对。你一遍又一遍地说。第一次调用
md.digest()
获取其长度后,
md
将重置。每次你在那之后调用它,你都会得到空字符串的摘要。亲爱的chrylis先生,现在我找到你了。你的意思是我只需要调用它一次,然后为一个变量分配结果,然后循环这个变量。我现在将在我的代码中尝试它。谢谢你抽出时间陪我。亲爱的克里利斯先生,我非常感谢你,你说得对。这是可行的,但有一点不同。我的代码给了我
A665A45920422F9D417E4867EFDC4FB8A04A1F3FFF1FA07E998E86F7F7F7A27AE3
但是在线网站给了我
A665A4592042F9D417E4867EFDC4FB8A04A1F3FFF1FA07E998E86F7A27AE3
除了大写字母和小写字母外,它们是一样的。这是错误的吗?@user3110137您将字节打印为十六进制数字,不区分大小写(它们只是将
A
to
F
视为更多的数字)。如果您需要一个或另一个(小写更常见,但没有重要区别),只需大写或小写字符串,或使用a以大写打印。除非必须,否则请不要使用StringBuffer,它几乎在十年前被StringBuilder取代。
e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855