Javascript 从字符串生成最多32字节的子字符串

Javascript 从字符串生成最多32字节的子字符串,javascript,hash,solidity,Javascript,Hash,Solidity,我需要生成一个子字符串,该子字符串应该用作JavaScript中字符串的唯一标识符(类似于散列),从而降低冲突风险。但是,此哈希/子字符串的长度不应超过32字节 我需要这个,因为我必须将它存储在Solidity智能合约中,作为该字符串的标识符。我在JavaScript中找到了许多从字符串获取和散列代码的函数,但这不是我想要的 String.prototype.hashCode = function() { var hash = 0,

我需要生成一个子字符串,该子字符串应该用作JavaScript中字符串的唯一标识符(类似于散列),从而降低冲突风险。但是,此哈希/子字符串的长度不应超过32字节

我需要这个,因为我必须将它存储在Solidity智能合约中,作为该字符串的标识符。我在JavaScript中找到了许多从字符串获取和散列代码的函数,但这不是我想要的

         String.prototype.hashCode = function() {
            var hash = 0,
                i, chr;
            if (this.length === 0) return hash;
            for (i = 0; i < this.length; i++) {
                chr = this.charCodeAt(i);
                hash = ((hash << 5) - hash) + chr;
                hash |= 0; // Convert to 32bit integer
            }
            return hash;
        };
String.prototype.hashCode=function(){
var hash=0,
i、 chr;
if(this.length==0)返回哈希;
对于(i=0;ihash=((hash“hlwld”

您可以替换一些项,如

  • aeou
  • 所有非字母
  • t
    后跟一个
    h
    字符
var string='你好,这是一个聪明的问题'
result=string.toLowerCase().replace(/is |[aeou]|[a-z]| t(?=h)/g');

console.log(result);
?此答案返回您想要的格式:抱歉@kaido,但我认为它没有重复,Sha256不符合我的要求。事实上,“hello world”的哈希产生“b94d27b9934d3e08a52e52d7da7dabfac484efe37a5380ee9088f7ace2efcde9”与我所寻找的非常不同。请检查问题中的示例,我需要一个对哈希字符串有意义的人类可读哈希。另一个示例是“Hello World”=>“hlwld”,同样,不是32字节长度并不重要,但必须是32字节的最大长度。谢谢。那么这不是散列,而是子字符串,不冲突的要求是不可能的。
aaaaaaaaaaaa…(×64)
将产生与
aaaaaaaaaa…(×128)相同的结果
如果您将问题编辑为不要求散列,我会删除重复闭包,但您不会找到快乐。我很抱歉,但是如果我有一个长字符串,我将执行32字节的长度,然后只取第一个字符。这是不够的,因为如果某些字符串在第一部分中相等,我可能会有很多冲突。
Hello, this is a smart question
h ll    h        smr t q  sti n