首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >字符串的Base10加密

字符串的Base10加密
EN

Stack Overflow用户
提问于 2020-06-02 19:57:32
回答 1查看 609关注 0票数 2

我试图找到一种获得字符串的base10值的方法。这在哈希代码函数中很容易实现,如下图所示。但我注意到这些值是连续的或接近它的。下面的例子。

在这里,我不是在处理安全密码或其他任何事情,我只是希望能够将字符串转换为base10值,并且在执行此操作时始终获得相同的值。

可能有点过火,但看看现有的哈希选项,如MessageDigest。但它们都是Base64 (或多或少),但对于Base10则没有,考虑到这一点并不安全,这一点是预料中的。

我认为一个可能的选择是使用MessageDigest,获取一个base64值并对其进行正则化,只提取所有的数字。这意味着每次我通过消息摘要和regex编码只获得Base10值时,我都应该得到相同的值。

我的问题是,有没有更好的方法来做到这一点?而不是用加密来使它复杂化,这在我的情况下并不是真正需要的。

我只想按以下方式转换示例:

代码语言:javascript
复制
String s1 = "Sample00000000001";
// after encoding, getting Base10 value like -> 8725342728354

String s2 = "Sample00000000002"; 
// after encoding, getting Base10 value like -> 11576232138652 (random, not sequential even though only 1 character changed). 

尝试使用来自Java的Base64,这会按顺序(或关闭)产生结果,因此不是我想要的结果。仍然需要从这里重新计算出Base10值。

代码语言:javascript
复制
public static void main(String[] args) {
    String salt = "Sample";
    String num = "00000000001";
    Base64.Encoder encoder = Base64.getEncoder();
    Base64.Decoder decoder = Base64.getDecoder();
    String value  = salt + num;
    String encoded = encoder.encodeToString(value.getBytes());
    String decoded = new String(decoder.decode(encoded));
    // 00000000001 gives U2FtcGxlMDAwMDAwMDAwMDE=
    // 00000000002 gives U2FtcGxlMDAwMDAwMDAwMDI=
}

使用hashcode,这再次结束顺序或关闭。

代码语言:javascript
复制
public static void main(String[] args) {

    String salt = "Sample";
    String num = "00000000002";

    String v = salt+num;
    int hash = v.hashCode();
    System.out.println(hash);
}

最后一个选项,我正在使用库,如弹跳城堡或在构建的MessageDigest。

假设编码已经完成,我已经将其分配给下面的变量“value”。我只能通过regex提取Base10值,如下所示。

代码语言:javascript
复制
String value = "HASDJHSDGF3423HIHGH234565BJB666";
long result =  Long.valueOf(value.replaceAll("\\D+",""));
System.out.println(result); // end up with 3423234565666 as expected. 

目前,我倾向于使用MessageDigest的最后一个选项,但希望找到更好的方法来提供建议/选项。感谢你的帮助。谢谢。

EN

回答 1

Stack Overflow用户

发布于 2020-06-02 20:16:05

方法hashCode的目的是在HashMap等数据结构中搜索对象。标准实现是基于内存中的地址,而不是字符串的内容,因此对于您的情况来说,它是无用的。

Base64不是加密,也不是哈希函数。它只对二进制数据进行转换,以便将其存储为文本,因此输入中的小变化将使输出发生小的变化。

您需要的是使用一些真正的散列函数,如SHA,并将结果转换为您的格式。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62160392

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档