2017-02-24 26 views
-1

转换其实我有一个问题,hashing a password,并试图在字符串转换为把它放在一个数据库中。哈希Java中的密码,并试图在字符串

目前我有这样的代码

  MessageDigest digest = MessageDigest.getInstance("SHA-256"); 
      byte[] hash = digest.digest(motsDePasse.getBytes(StandardCharsets.UTF_8)); 
      String fileString = Base64.getEncoder().encodeToString(hash); 

该协议是,它并没有给我好的哈希。假设我尝试散列“12345”。它应该给我5994471abb01112afcc18159f6cc74b4f511b99806da59b3caf5a9c173cacfc5

但它实际上返回WZRHGrsBESr8wYFZ9sx0tPURuZgG2lmzyvWpwXPKz8U=

+0

为Base64值WZRHGrsBESr8wYFZ9sx0tPURuZgG2lmzyvWpwXPKz8U =是在十六进制5994471ABB01112AFCC18159F6CC74B4F511B99806DA59B3CAF5A9C173CACFC5。您只需使用Hex代码而不是Base64编码 – Ali

回答

1

尝试使用十六进制编码器

MessageDigest digest = MessageDigest.getInstance("SHA-256"); 
    byte[] hash = digest.digest("12345".getBytes(StandardCharsets.UTF_8)); 

    String hex = DatatypeConverter.printHexBinary(hash); 
    System.out.println(hex); 

输出

5994471ABB01112AFCC18159F6CC74B4F511B99806DA59B3CAF5A9C173CACFC5

+0

您的解决方案可以运行。谢谢 –

0

您Base64编码它。如果你用十六进制编码它,你会得到你正在寻找的输出。