Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何通过HmacSHA256使用Java加密Json_Java_Json_Hmac - Fatal编程技术网

如何通过HmacSHA256使用Java加密Json

如何通过HmacSHA256使用Java加密Json,java,json,hmac,Java,Json,Hmac,我有这样一个想法: { "idcardno":"510525198803154232", "name":"丁品" } 如果我使用HmacSHA256,请使用密钥对其进行加密 252c04cdb0d047f8ab9a1eb49b1db1686e321104756ff792779a4d40d94f0dfd70a8b9ffa6d6d930e57d0e7206d26d13 那么我应该得到这样的结果: cd1fe72697a832d57198b8c0d00289309dffe6f057

我有这样一个想法:

{
    "idcardno":"510525198803154232",
    "name":"丁品"
}
如果我使用HmacSHA256,请使用密钥对其进行加密

252c04cdb0d047f8ab9a1eb49b1db1686e321104756ff792779a4d40d94f0dfd70a8b9ffa6d6d930e57d0e7206d26d13
那么我应该得到这样的结果:

cd1fe72697a832d57198b8c0d00289309dffe6f05750aa2a145f9359e41f1843
i2hF1WyxmS9MctkFLxBM2mgXeicraH9DhR9P9JySDFk=
我需要在java环境中加密这个json对象,所以我使用下面的java代码来实现这一点:

import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;

import org.apache.commons.codec.binary.Base64;
import org.json.JSONObject;

public class EncryptUtil {

    // Charset to use when encrypting a string.
    private static final String UTF_8 = "UTF-8";
    // Encrypt key
    private static final String APP_SECRET = "252c04cdb0d047f8ab9a1eb49b1db1686e321104756ff792779a4d40d94f0dfd70a8b9ffa6d6d930e57d0e7206d";

    public static void main(String[] args) throws Exception {   
        //build json object
        JSONObject object = new JSONObject();
        object.put("idcardno", "510525198803154232");
        object.put("name", "丁品");

        String result = enCode(object.toString());
        //print encrpted result
        System.out.println(result);
    }

    public static String enCode(String orginalMsg) throws Exception {
        try {   
            Mac sha256_HMAC = Mac.getInstance("HmacSHA256");
            SecretKeySpec secret_key = new SecretKeySpec(APP_SECRET.getBytes(), "HmacSHA256");
            sha256_HMAC.init(secret_key);
            String hash = Base64.encodeBase64String(sha256_HMAC.doFinal(orginalMsg.getBytes(UTF_8)));
            return hash;
        }
        catch (Exception e){
            throw new Exception(e);
        }
    }
}
但包含的结果是:

cd1fe72697a832d57198b8c0d00289309dffe6f05750aa2a145f9359e41f1843
i2hF1WyxmS9MctkFLxBM2mgXeicraH9DhR9P9JySDFk=

如何通过Java代码获得正确的结果?

我的第一个猜测是:您想要得到的是十六进制编码,但实际得到的是base64编码(因为这就是您在代码中所做的)。在最后一步中,尝试使用十六进制编码而不是base64编码。@Jesper,谢谢,我尝试使用十六进制编码,它可以工作,但另一个原因似乎是我的json对象具有tab空间。制作api的开发人员已经消除了tab格式的限制,所以问题得到了解决。杰斯珀的建议很有用!