java—使用无盐单向散列,同时修复无完整性检查问题的代码下载

ufj5ltwl  于 2021-07-13  发布在  Java
关注(0)|答案(0)|浏览(276)

我试图加载一些库“.so”/.dll”文件使用下面的代码

System.load("some file");

然后,在使用checkmarx工具执行静态应用程序安全测试(sast)之后,它抱怨下载的代码没有完整性检查问题。
然后,我试图修复下载的代码没有完整性检查sast问题使用校验和
我使用sha-512算法生成了一个库文件校验和,并将其保持在字符串常量中

public static final String TRUSTED_SHA512 = "12af30d9ffc1cdd85d21e73c8c81b7c379a9b4ab2ea5676cd9d232788e2b44fbab876796104f37d0f6a5f7bc5f97eb3663e432785b94039b5320bbfac3d19516";

现在,在加载文件之前,我用相同的算法再次计算hash,并用字符串常量trusted\u sha512检查它

MessageDigest md = MessageDigest.getInstance("SHA-512");
        String sha512ofQrcToolsWrapper = ChecksumHelper.getFileChecksum(md,temp);
        if(sha512ofQrcToolsWrapper.equalsIgnoreCase(ServiceConstants.TRUSTED_SHA512_OF_QRCTOOLSWRAPPER)) {
            System.load(temp.getAbsolutePath());
        }else{
            throw new Exception("failed to load windows dll file : Checksum mismatched");
        }

现在checkmarx工具提供了一个没有salt的单向散列的用法,然后我用静态salt值更新了消息摘要。使用fix salt value而不是random value的原因是,我们希望在运行时计算相同的哈希值,以检查常量中已经存在的哈希值

public static String getFileChecksum(MessageDigest digest, File file) throws IOException, NoSuchAlgorithmException {
    //Get file input stream for reading the file content
    FileInputStream fis = new FileInputStream(file);

    //Create byte array to read data in chunks
    byte[] byteArray = new byte[1024];
    int bytesCount = 0;

    //Read file data and update in message digest
    while ((bytesCount = fis.read(byteArray)) != -1) {
        digest.update(byteArray, 0, bytesCount);
    }

    //Static salt value
    digest.update(getSalt());

    //close the stream; We don't need it now.
    fis.close();

    //Get the hash's bytes
    byte[] bytes = digest.digest();

    //This bytes[] has bytes in decimal format;
    //Convert it to hexadecimal format
    StringBuilder sb = new StringBuilder();
    for (int i = 0; i < bytes.length; i++) {
        sb.append(Integer.toString((bytes[i] & 0xff) + 0x100, 16).substring(1));
    }

    //return complete hash
    return sb.toString();
}

注意“getsalt()方法正在返回具有固定值的字节数组”
不过,萨斯特还是在抱怨这两个问题
下载没有完整性检查的代码
使用不含盐的单向散列
请提供解决这些问题的方案。如果还有什么需要澄清的,请告诉我。
提前谢谢

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题