哈希签名:哈希函数(hash)在数字签名中的实现思路

哈希签名:哈希函数(hash)在数字签名中的实现思路

 

以下代码实现上的思路来自:Constructing Digital Signatures from a One Way Function, 文档资料源自http://lamport.azurewebsites.net/pubs/dig-sig.pdf, 这个是我下来上传的地址:http://dl.iteye.com/topics/download/f80e7b49-8d9c-30bb-9db9-8b3df6171465

 

public class HashDigest {

    private static byte[] privateKeyEncodedPart1 = null;
    private static byte[] privateKeyEncodedPart2 = null;

    private static byte[] publicKeyEncodedPart1 = null;
    private static byte[] publicKeyEncodedPart2 = null;

    @BeforeClass
    public static void init() {
        privateKeyEncodedPart1 = new byte[256 * 8];
        privateKeyEncodedPart2 = new byte[256 * 8];

        for (int i = 0; i < 256; i++) {
            Random random = new Random();
            byte[] bytes = new byte[8];
            random.nextBytes(bytes);
            System.arraycopy(bytes, 0, privateKeyEncodedPart1, i * 8, bytes.length);
            random.nextBytes(bytes);
            System.arraycopy(bytes, 0, privateKeyEncodedPart2, i * 8, bytes.length);
        }
        publicKeyEncodedPart1 = new byte[256 * 8];
        publicKeyEncodedPart2 = new byte[256 * 8];
        for (int i = 0; i < 256; i++) {
            byte[] t = new byte[8];
            System.arraycopy(privateKeyEncodedPart1, i * 8, t, 0, t.length);
            t = hash(t);
            System.arraycopy(t, 0, publicKeyEncodedPart1, i * 8, t.length);

            System.arraycopy(privateKeyEncodedPart2, i * 8, t, 0, t.length);
            t = hash(t);
            System.arraycopy(t, 0, publicKeyEncodedPart2, i * 8, t.length);
        }

        byte[] privateKeyEncoded = getPrivateKeyEncoded();
        System.out.println("private key: " + Base64.byteArrayToBase64(privateKeyEncoded));
        byte[] publicKeyEncoded = getPublicKeyEncoded();
        System.out.println("public key: " + Base64.byteArrayToBase64(publicKeyEncoded));
    }

    private static byte[] getPrivateKeyEncoded() {
        byte[] encoded = new byte[privateKeyEncodedPart1.length + privateKeyEncodedPart2.length];
        System.arraycopy(privateKeyEncodedPart1, 0, encoded, 0, privateKeyEncodedPart1.length);
        System.arraycopy(privateKeyEncodedPart2, 0, encoded, privateKeyEncodedPart1.length, privateKeyEncodedPart2.length);
        return encoded;
    }

    private static byte[] getPublicKeyEncoded() {
        byte[] encoded = new byte[publicKeyEncodedPart1.length + publicKeyEncodedPart2.length];
        System.arraycopy(publicKeyEncodedPart1, 0, encoded, 0, publicKeyEncodedPart1.length);
        System.arraycopy(publicKeyEncodedPart2, 0, encoded, publicKeyEncodedPart1.length, publicKeyEncodedPart2.length);
        return encoded;
    }

    // 仅演示用
    private static byte[] hash(byte[] input) {
        byte[] bytes = new byte[input.length];
        for (int i = 0; i < input.length; i++) {
            bytes[i] = (byte) ~input[i];
        }
        return bytes;
    }

    public byte[] digest(byte[] input) {
        byte[] digest = new byte[input.length * 8];
        for (int i = 0; i < input.length; i++) {
            int j = input[i] % 256;
            if ((i & 0x01) == 0) {
                System.arraycopy(privateKeyEncodedPart1, j * 8, digest, i * 8, 8);
            } else {
                System.arraycopy(privateKeyEncodedPart2, j * 8, digest, i * 8, 8);
            }
        }
        return digest;
    }

    public boolean verify(byte[] input, byte[] digest) {
        for (int i = 0; i < input.length; i++) {
            byte[] t = new byte[8];
            System.arraycopy(digest, i * 8, t, 0, t.length);
            int j = input[i] % 256;

            byte[] b = new byte[8];
            if ((i & 0x01) == 0) {
                System.arraycopy(publicKeyEncodedPart1, j * 8, b, 0, b.length);
            } else {
                System.arraycopy(publicKeyEncodedPart2, j * 8, b, 0, b.length);
            }
            b = hash(b);
            for (int k = 0; k < t.length; k++) {
                if (t[k] != b[k]) {
                    return false;
                }
            }
        }
        return true;
    }

    @org.junit.Test
    public void test() {
        String message = "13120983870";
        System.out.println(message + ", base64: " + Base64.byteArrayToBase64(message.getBytes()));
        byte[] digest = digest(message.getBytes());
        System.out.println("signature: " + Base64.byteArrayToBase64(digest));
        boolean result = verify(message.getBytes(), digest);
        System.out.println(result);

        result = verify("13120983871".getBytes(), digest);
        System.out.println(result);

        result = verify("13120983879".getBytes(), digest);
        System.out.println(result);

        result = verify("abcdefg".getBytes(), digest);
        System.out.println(result);
    }
}

 

 

private key: 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
public key: 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
13120983870, base64: MTMxMjA5ODM4NzA=
signature: gt0SgjpLWmyPgLdmw3mbxYLdEoI6S1psAG4ZGBSpBPs+62mTq93Vt+cB+FshxiYJTqKV1cnTpGqPgLdmw3mbxU6ildXJ06RqngIFxsrihHU+62mTq93Vtw==
true
false
false
false

 

1、Constructing Digital Signatures from a One Way Function, http://lamport.azurewebsites.net/pubs/pubs.html#dig-sig

2、Constructing Digital Signatures from a One Way Function, http://lamport.azurewebsites.net/pubs/dig-sig.pdf

猜你喜欢

转载自lobin.iteye.com/blog/2436715