· 6 years ago · Feb 18, 2019, 06:34 PM
1import javax.crypto.Cipher;
2import javax.crypto.spec.IvParameterSpec;
3import javax.crypto.spec.SecretKeySpec;
4import java.io.UnsupportedEncodingException;
5import java.security.MessageDigest;
6import java.security.NoSuchAlgorithmException;
7import java.util.Arrays;
8import java.util.Base64;
9import java.io.ByteArrayOutputStream;
10
11public class ChecksumGen {
12
13 public static void main(final String[] args) {
14 String data = "INPUTDATA";
15 String secretKey = "0000000000000000000000000000000000000000000000000000000000000000";
16 byte[] iv = new byte[16];
17 try {
18 byte[] hashedData = getDigest(data);
19 byte[] key = hexStringToByteArray(secretKey);
20 byte[] checksum = encrypt(key, hashedData, iv);
21 showB64("key ", key);
22 showB64("iv ", iv);
23 showB64("hashedData ", hashedData);
24 showB64("checksum ", checksum);
25 } catch (Exception ex) {
26 throw new RuntimeException(ex);
27 }
28 }
29
30 public static byte[] getDigest(String checkSumInput) {
31 try {
32 MessageDigest localMessageDigest = MessageDigest.getInstance("SHA-256");
33 byte[] checkSumInputBytes = checkSumInput.getBytes("UTF-8");
34 localMessageDigest.update(checkSumInputBytes);
35 byte[] digest = localMessageDigest.digest();
36 return digest;
37 } catch (NoSuchAlgorithmException | UnsupportedEncodingException ex) {
38 throw new RuntimeException(ex);
39 }
40 }
41
42 public static byte[] hexStringToByteArray(String s) {
43 byte[] b = new byte[s.length() / 2];
44 for (int i = 0; i < b.length; i++) {
45 int index = i * 2;
46 int v = Integer.parseInt(s.substring(index, index + 2), 16);
47 b[i] = (byte) v;
48 }
49 return b;
50 }
51
52 public static byte[] encrypt(byte[] key,byte[] data, byte[] iv)throws Exception{
53 SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
54 IvParameterSpec ivSpec = new IvParameterSpec(iv);
55 Cipher acipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
56 acipher.init(Cipher.ENCRYPT_MODE, secretKeySpec,ivSpec);
57 byte[] arrayOfByte1 = acipher.doFinal(data);
58 return arrayOfByte1;
59 }
60
61 public static void showB64(String label, byte[] rawData) {
62 System.out.println(label + ":" + Base64.getEncoder().encodeToString(rawData));
63 }
64}
65
66<?php
67$data = "INPUTDATA";
68$hashedData = hash("sha256", $data, true);
69$secretKey = "0000000000000000000000000000000000000000000000000000000000000000";
70$ivStr = "00000000000000000000000000000000";
71$key = pack('H*', $secretKey);
72$iv = pack('H*', $ivStr);
73$inputData = pkcs5_pad($hashedData, 16);
74showB64('key', $key);
75showB64('iv', $iv);
76showB64('hashedData', $hashedData);
77showB64('inputData', $inputData);
78$checksum = encrypt($key, $inputData, $iv);
79showB64('checksum', $checksum);
80
81function encrypt($key,$data,$iv){
82 $cipher = 'AES-128-CBC';
83 $options = OPENSSL_RAW_DATA|OPENSSL_ZERO_PADDING;
84 $raw = openssl_encrypt(
85 $data,
86 $cipher,
87 $key,
88 $options,
89 $iv
90 );
91 return $raw;
92}
93
94function pkcs5_pad($text, $blocksize){
95 $pad = $blocksize - (strlen($text) % $blocksize);
96 return $text . str_repeat(chr($pad), $pad);
97}
98
99function showB64($label, $rawData) {
100 echo "{$label} :".base64_encode($rawData)."n";
101}
102
103key :AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
104iv :AAAAAAAAAAAAAAAAAAAAAA==
105hashedData :ZAgNCUfIbdT9EjdkCb3XDNpMFGV34rXNjcTOQ9cdZ3w=
106checksum :9NS/ZKMscpa4V7i2YQQPoycxCwbL1BlK3h9O/1ujoD1iYgjE8tZx+JRGflw5WikH
107
108key :AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA=
109iv :AAAAAAAAAAAAAAAAAAAAAA==
110hashedData :ZAgNCUfIbdT9EjdkCb3XDNpMFGV34rXNjcTOQ9cdZ3w=
111inputData :ZAgNCUfIbdT9EjdkCb3XDNpMFGV34rXNjcTOQ9cdZ3wQEBAQEBAQEBAQEBAQEBAQ
112checksum :LtdJzSl9UgEpZrpdg7X5g5CYqE3eXQvijazrvkw0XFNY2bxn8zGp1ea8DrUmw/uu