Java 有没有一种方法可以快速计算字符串的签名以帮助检测字符串更改?

Java 有没有一种方法可以快速计算字符串的签名以帮助检测字符串更改?,java,string,signature,Java,String,Signature,我们有一个值为字符串的非关键标记。我们要检查标记值的更改。但我们不想进行字符串比较,因为这涉及到客户机-服务器,而是要计算字符串的某种值,并使用该值来帮助检测字符串更改。由于字符串是非关键的,我们想知道是否有一个非常简单和快速的解决方案来计算这样的值,以帮助检测字符串的更改 使用.hashCode() String.hashCode()并不完美,因为它是有损的。因此,字符串可能会更改,并且它将具有相同的哈希代码。(但这种情况不会经常发生)几乎每次字符串更改时,其哈希代码也会更改 因此,您知道您要

我们有一个值为字符串的非关键标记。我们要检查标记值的更改。但我们不想进行字符串比较,因为这涉及到客户机-服务器,而是要计算字符串的某种值,并使用该值来帮助检测字符串更改。由于字符串是非关键的,我们想知道是否有一个非常简单和快速的解决方案来计算这样的值,以帮助检测字符串的更改

使用.hashCode()

String.hashCode()
并不完美,因为它是有损的。因此,字符串可能会更改,并且它将具有相同的哈希代码。(但这种情况不会经常发生)几乎每次字符串更改时,其哈希代码也会更改

因此,您知道您要进入的是什么,
String.hashCode()
的代码如下:

public int hashCode() {
    int h = hash;  // the cached hash value
    int len = count;  // the number of characters in the string
    if (h == 0 && len > 0) {
        int off = offset;
        char val[] = value;

        for (int i = 0; i < len; i++) {
            h = 31*h + val[off++];
        }
        hash = h;
    }
    return h;
}
public int hashCode(){
int h=hash;//缓存的哈希值
int len=count;//字符串中的字符数
如果(h==0&&len>0){
int off=偏移量;
char val[]=值;
对于(int i=0;i
是。但如果需要唯一性,请不要使用哈希代码。使用SHA256摘要

String tag = "...";
MessageDigest md = MessageDigest.getInstance("SHA-256");
md.update(text.getBytes("UTF-8"));
byte[] digest = md.digest();

string.hashcode()?(哈希代码冲突的风险很低)这种情况会经常发生
int
仅为32位宽。是。这与根据散列码丢失字符串更改的可能性不同。OP不是在大范围内寻找碰撞,这是一个非常公平的观点。但是,如果您只使用过一次此软件,那么1/2^32只是一个公平的公式-这就是1的含义。如果您有意在一个明显的需求上妥协,我会期望32位值带来很大的好处;我没有注意到任何。我想我不明白为什么字符串比较是不需要的,但字节数组比较是可以的?我想大小。。。我也希望有人能澄清这个问题。