【问题标题】:Cross platform hashcode跨平台哈希码
【发布时间】:2013-06-19 06:53:33
【问题描述】:

我需要创建一个包含几个基本类型对象的校验和。 我阅读了THIS 页面中的“编写正确的 hashCode 方法”部分。我需要在 java、php 和 Objectivec 中进行类似的工作(并为相同的输入返回相同的值)。

我该怎么做?有没有我可以使用的库?

编辑(我当前的代码):

public class CheckSumGenerator {

    private final static String SEPARATOR = "|";
    private final static String DOUBLE_FORMAT = "%.30f";
    private final static DecimalFormat FORMAT_DOUBLE=new DecimalFormat("#.#################################");

    StringBuilder tempChain = new StringBuilder();

    public void putInt(int value) {
        tempChain.append(SEPARATOR).append(value);
    }

    public void putLong(long value) {
        tempChain.append(SEPARATOR).append(value);
    }

    public void putString(String value) {
        tempChain.append(SEPARATOR).append(value);
    }

    public void putBoolean(boolean value) {
        tempChain.append(SEPARATOR).append(value ? 1 : 0);
    }

    public void putDouble(double value) {
        tempChain.append(SEPARATOR).append(FORMAT_DOUBLE.format(value));
    }

    public String getChecksum() {
        return HashUtils.MD5(tempChain.toString());
    }

}

【问题讨论】:

  • 这看起来很完美......

标签: java php android


【解决方案1】:

您正在寻找的是校验和方法。 MD5 是一种散列技术,它将始终为您提供跨平台和语言的相同输出。我认为您必须自己研究才能找出每种语言的 API。

但这里有一些好的开始。

还有更多

【讨论】:

    【解决方案2】:

    依赖 Java 的 .hashCode() 不是您想要的。如果您需要校验和,您可以选择使用例如 MD5(几乎所有语言都可用)或 SHA1、SHA256、SHA512 等。

    选择你的毒药!

    【讨论】:

    • 那我是不是把所有的值组合成一个字符串然后生成一个MD5呢?
    • @Addev 你为什么不写一个你想要实现的代码示例
    • @Addev 这将是一个解决方案,但要小心,选择一个您确定不会出现在字符串中的分隔符;例如,如果您在一侧有字符串foobarbaz,在另一侧有foobarbaz,请不要连接:它们将有相同的答案
    猜你喜欢
    • 2011-03-23
    • 1970-01-01
    • 2010-10-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多