当前位置: 首页 > 面试题库 >

&0xff和MD5分别做什么?

岑驰
2023-03-14
问题内容
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class JavaMD5 {

    public static void main(String[] args) {
        String passwordToHash = "MyPassword123";
        String generatedPassword = null;
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(passwordToHash.getBytes());
            byte[] bytes = md.digest();
            StringBuilder sb = new StringBuilder();
            for (int i = 0; i < bytes.length; i++) {
                sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
            }
            generatedPassword = sb.toString();

        } catch (NoSuchAlgorithmException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        System.out.println(generatedPassword);
    }
}

这行是问题所在:

sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));

每个部分在此结构中起什么作用????

谢谢,我很抱歉询问Beacuse,因为我是Java新手。


问题答案:

大概大多数代码都是清晰的,这里唯一让您感到困惑的是此表达式:

(bytes[i] & 0xff) + 0x100

第一部分:

bytes[i] & 0xff

加宽在位置字节iint的比特位置8-31用零值。在Java中,byte数据类型是带符号的整数值,因此加宽的符号会扩展该值。如果没有& 0xff,则大于0x7f的值最终将变为负值int。剩下的就很明显了:它添加了0x100,它只是打开了索引8的位(因为它保证为0 in
(bytes[i] & 0xff)。然后String通过调用转换为十六进制值)Integer.toString(..., 16)

首先添加0x100,然后剥离1(通过substring(1)调用完成,它将子字符串从位置1到末尾开始)的原因是为了保证最终结果中的两个十六进制数字。否则,转换为十六进制时,低于0x10的字节值将以一个字符的字符串结尾。

是否所有性能都比以下更好(尚不清楚)尚有争议:

sb.append(String.format("%02x", bytes[i]));


 类似资料:
  • 那么,在Java中,你们都用什么来处理它们呢?

  • 本文向大家介绍请问,hibernate的 save() 和persist() 方法分别是做什么的?有什么区别?相关面试题,主要包含被问及请问,hibernate的 save() 和persist() 方法分别是做什么的?有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 考察点:session   Hibernate的对象有三种状态:瞬时态(transient)、持久态(persistent)

  • 本文向大家介绍MySQL由哪些部分组成, 分别用来做什么?相关面试题,主要包含被问及MySQL由哪些部分组成, 分别用来做什么?时的应答技巧和注意事项,需要的朋友参考一下 Server 连接器: 管理连接, 权限验证. 分析器: 词法分析, 语法分析. 优化器: 执行计划生成, 索引的选择. 执行器: 操作存储引擎, 返回执行结果. 存储引擎: 存储数据, 提供读写接口.

  • 问题内容: 我知道,当使用支持异常的语言(例如C ++)时,必须向运行时环境提供其他信息,以描述在处理异常期间必须解开的调用框架。此信息包含在目标文件的特殊部分中,例如和。 但是,这些部分中存储了什么样的数据结构?我的意思是,可以使用任何C结构读取它们吗?难道他们有什么做的语句(如,,,,和在GNU汇编代码)?如果它们这样做,那么这些子句中的每一个在这些部分中引起什么?本节与该节有什么关系? 我希

  • 问题内容: 我正在尝试在以下代码片段中了解0xFF的作用: 有任何想法吗? 问题答案: 是二进制的十六进制常量。通过对该常量使用按位AND(),它仅保留原始的最后8位(在这种情况下,无论如何)。

  • 使用指南 - 分析云 - 分析云能做什么 赋能各业务角色提升工作效能 百度统计分析云能够全面提升客户各职能角色工作效能,助力达成用户全生命周期增长 支持产品进行功能评估提升转化率 产品角色作为产品规划者,重点关注产品的流程设置和功能设计是否给予用户良好的使用体验,并确保用户充分体验产品的核心价值。 支持运营进行用户分群实现精准营销 运营角色重点关注用户构成现状及变化,并从用户行为角度剖析用户的活跃