Java 使用哈希或编码将大字符串缩减为小字符串

Java 使用哈希或编码将大字符串缩减为小字符串,java,hash,Java,Hash,可能重复 我尝试用java为bmp文件创建自己的校验和算法。因此,对于54字节(432位)的报头,得到的校验和长度为378位 如何将其缩减为较小的数据集?关于如何实现我自己的哈希算法,有什么建议吗?(其中一个条件是不使用现有算法) 我使用了一个非常简单的哈希函数 publicstaticstringhash_函数(stringbmpbytes){ String hash=”“; int left_shift=Integer.parseInt(bmpBytes); int right_shift=

可能重复

我尝试用java为bmp文件创建自己的校验和算法。因此,对于54字节(432位)的报头,得到的校验和长度为378位

如何将其缩减为较小的数据集?关于如何实现我自己的哈希算法,有什么建议吗?(其中一个条件是不使用现有算法)

我使用了一个非常简单的哈希函数

publicstaticstringhash_函数(stringbmpbytes){

String hash=”“;
int left_shift=Integer.parseInt(bmpBytes);
int right_shift=Integer.parseInt(bmpBytes);
左移位=左移位>2;
int xor=左移位^右移位;
hash+=Integer.toString(xor);
返回散列;
}
可能的答案: 我找到了一种缩短字符串的方法,通过生成“n”个随机二进制位
n
然后执行
哈希%n位


如果这是一个有效的答案,一定要让我知道,我会将问题标记为已回答。

这里有一个简单的问题。也许这能激励你做得更好

public static String encode(String header) {
    char[] code = new char[32];
    for(int i = 0; i < header.length(); i++) {
        code[i % code.length] = (char)((int)code[i % code.length] ^ (int)header.charAt(i));
    }
    return new String(code);
}
公共静态字符串编码(字符串头){
字符[]代码=新字符[32];
对于(int i=0;i
您需要它做什么?短散列是使用0位。你需要的最小位数是多少?我已经更新了我的帖子,加入了我的哈希函数。请检查。您必须更精确地满足您的要求。
return”“
算法满足您所说的要求:字符串减少为较小的字符串。算法应该是安全的,可逆的,等等,但是不清楚你为什么写这个。你能说明你的要求是什么吗?顺便说一句,将散列存储为文本是不寻常的,因为它通常是二进制值。文本实际上是为BMP文件生成的校验和。我的目标是获取BMP文件的54字节头,并将其与校验和进行匹配,以查看它是否损坏。这真的很有趣!谢谢我将尝试并修改它。如何使用该编码字符串返回原始字符串?@MuneebNasir通常使用哈希这是不可能的,哈希的原因之一是安全性,您可以在密码上使用它进行单向转换,尽管多个字符串映射到同一输出,但您永远无法确定原始输入
public static String encode(String header) {
    char[] code = new char[32];
    for(int i = 0; i < header.length(); i++) {
        code[i % code.length] = (char)((int)code[i % code.length] ^ (int)header.charAt(i));
    }
    return new String(code);
}