在 cd1 中使用 SHA512Digest,就像在 java 中使用 MessageDigest

Posted

技术标签:

【中文标题】在 cd1 中使用 SHA512Digest,就像在 java 中使用 MessageDigest【英文标题】:Use SHA512Digest in cd1 like using MessageDigest in java 【发布时间】:2018-10-13 03:52:20 【问题描述】:

我正在尝试将 java api 转换为 cd1 api 的加密... 我在java中有这个方法:

private static byte[] encodePassword(String password,String salt) throws UnsupportedEncodingException 
                          
    String mergedPasswordAndSalt =mergePasswordAndSalt(password, salt);
    SHA512Digest digester =new  SHA512Digest();        
    byte[] hash = new byte[digester.getDigestSize()];   
             System.out.println("init hash= "+Base64.encode(hash));
    try 
        hash = mergedPasswordAndSalt.getBytes("UTF-8");  
        System.out.println("init merged= "+Base64.encode(hash));
        digester.doFinal(hash,0);  
          System.out.println("after");
     catch (Exception ex) 
        System.out.println("Exception");                 
              
    for (int  i = 1; i < ITERATIONS; ++i)             
        digester.doFinal(Bytes.concat(hash, mergedPasswordAndSalt.getBytes("UTF-8")),0); 
                     
    return hash;

我正在尝试以与 MessageDigest(Java 中)相同的方式使用 SHA512Digest:

private static byte[] encodePassword(String password,String salt) throws UnsupportedEncodingException 
                          
    String mergedPasswordAndSalt =mergePasswordAndSalt(password, salt);
    SHA512Digest digester =new  SHA512Digest();

    byte[] hash = null;
    try 
        hash = mergedPasswordAndSalt.getBytes("UTF-8");           
        digester.doFinal(mergedPasswordAndSalt.getBytes("UTF-8"),0);            
     catch (Exception ex) 
        System.out.println("Exception");                 
                        
    for (int i = 1; i < ITERATIONS; ++i)             
        digester.doFinal(Bytes.concat(hash, mergedPasswordAndSalt.getBytes("UTF-8")),0);           
                       
    return hash;

在我的项目中建立了lib,但是doFinal不起作用...我无法将java转换为代号,当我加密的结果返回未被doFinal修改的初始哈希时

    init hash= AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
AAAAAAAAAA==
init merged= MDAwMHtUZXdSLm1ldE9yTldrV1JTcWVJaHV4ejAvN2ZjeS5HUGIvS1l5c1BybkFZfQ==
Exception

and the method return Sha512salt='TewR.metOrNWkWRSqeIhuxz0/7fcy.GPb/KYysPrnAY', hash='z4PhNX7vuL3xVChQ1m2AB9Yg5AULVxXcg/SpIdNs6c5H0NE8XYXysP+DGNKHfuwvYw=='

【问题讨论】:

有什么问题?你不说哪里出了问题。 我找到了问题,doFinal 没有实现,谢谢 doFinal 实现了,你导入正确的包了吗:github.com/codenameone/bouncy-castle-codenameone-lib/blob/… 【参考方案1】:

我们只需要创建一个散列当前输入的方法并返回该散列以用于下一次迭代:

public static byte[] digestt(byte[] bytes) 
Digest digest = new SHA512Digest();
byte[] resBuf = new byte[digest.getDigestSize()];

digest.update(bytes, 0, bytes.length);
digest.doFinal(resBuf, 0);
return resBuf;

【讨论】:

以上是关于在 cd1 中使用 SHA512Digest,就像在 java 中使用 MessageDigest的主要内容,如果未能解决你的问题,请参考以下文章

php 实现python hashlib.md5.digest

Jmeter 加密处理方法

hashlib python 加密框架

WebRTC Native M96 基础Base模块介绍之实用方法的封装(MD5Base64时间随机数)

WebRTC Native M96 基础Base模块介绍之实用方法的封装(MD5Base64时间随机数)

Python hashlib模块