身份证实名认证接口调用示例

import org.springframework.web.client.RestTemplate;


public class Demo {

    public static void main(String[] args) {
        String key = "您的key";
        String openid="您的openid";
        String realname = "奥巴马" ;
        String idcard = "320382*********3919";
        System.out.println(demo(key, openid, realname, idcard));
    }

    public static  String demo(String key,String openid,String realname,String idcard){
        openid = Md5Util.MD5(openid).substring(0,16);
        System.out.println(openid);
        realname =(AesUtil.encrypt(realname, openid));
        idcard = (AesUtil.encrypt(idcard, openid));
        String url = "http://op.juhe.cn/idcard/queryEncry?key="+key+"&idcard="+idcard+"&realname="+realname;
        System.out.println(url);
        return http(url);
    }
    public static String http(String url){
        RestTemplate restTemplate = new RestTemplate();
        return restTemplate.getForObject(url, String.class);

    }
}


import java.security.MessageDigest;

/**
 * Created on 2016/10/14
 *
 * @author Saligia
 */
public class Md5Util {

    private Md5Util() {
    }

    public static String MD5_16(String s) {
        String md5 = MD5(s);
        return md5 == null ? null : md5.substring(8, 24);
    }

    public static String MD5(String s) {
        char[] hexDigits = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f'};

        try {
            byte[] e = s.getBytes();
            MessageDigest mdInst = MessageDigest.getInstance("MD5");
            mdInst.update(e);
            byte[] md = mdInst.digest();
            int j = md.length;
            char[] str = new char[j * 2];
            int k = 0;

            for (byte byte0 : md) {
                str[k++] = hexDigits[byte0 >>> 4 & 15];
                str[k++] = hexDigits[byte0 & 15];
            }

            return new String(str);
        } catch (Exception var10) {
            var10.printStackTrace();
            return null;
        }
    }

}


import org.springframework.util.StringUtils;

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

import static cn.juhe.task.Md5Util.MD5_16;

/**
 * Created by hadoop
 * on 16/4/11.
 */
public class AesUtil {

    public static final String KEY = "di3jGKwsfa123%1s";

    // 加密
    public static String encrypt(String sSrc, String sKey) {
        if (StringUtils.isEmpty(sSrc)) {
            return "";
        }
        try {
            SecretKeySpec skeySpec = new SecretKeySpec(sKey.getBytes("utf-8"), "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");//"算法/模式/补码方式"
            cipher.init(Cipher.ENCRYPT_MODE, skeySpec);
            byte[] encrypted = cipher.doFinal(sSrc.getBytes("utf-8"));
            return new String(Base64.getEncoder().encode(encrypted), "utf-8");
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String encrypt(String sSrc) {
        return encrypt(sSrc, KEY);
    }

    //解密
    public static String decrypt(String input, String key) {
        if (StringUtils.isEmpty(input)){
            return "";
        }
        try {
            SecretKeySpec skey = new SecretKeySpec(key.getBytes(), "AES");
            Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
            cipher.init(Cipher.DECRYPT_MODE, skey);
            byte[] output = cipher.doFinal(Base64.getDecoder().decode(input));
            return new String(output);
        } catch (Exception e) {
            System.out.println(e.toString());
        }
        return null;
    }

    public static String encryptCBC(String data) {
        return encryptCBC(data, KEY);
    }

    public static String encryptCBC(String data, String key) {
        if (StringUtils.isEmpty(data)) {
            return "";
        }
        try {
            String iv = MD5_16(key); // iv不一定要去md5 16位, 加密解密端约定相同即可

            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            int blockSize = cipher.getBlockSize();

            byte[] dataBytes = data.getBytes();
            int plaintextLength = dataBytes.length;
            if (plaintextLength % blockSize != 0) {
                plaintextLength = plaintextLength + (blockSize - (plaintextLength % blockSize));
            }

            byte[] plaintext = new byte[plaintextLength];
            System.arraycopy(dataBytes, 0, plaintext, 0, dataBytes.length);

            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

            cipher.init(Cipher.ENCRYPT_MODE, keyspec, ivspec);
            byte[] encrypted = cipher.doFinal(plaintext);

            return  Base64.getEncoder().encodeToString(encrypted);
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

    public static String decrypt(String input) {
        return decrypt(input, KEY);
    }

    public static String decryptCBC(String data) {
        return decryptCBC(data, KEY);
    }

    public static String decryptCBC(String data, String key) {
        if (StringUtils.isEmpty(data)) {
            return "";
        }
        try {
            String iv = MD5_16(key);  // iv不一定要去md5 16位, 加密解密端约定相同即可

            byte[] encrypted1 =  Base64.getDecoder().decode(data);

            Cipher cipher = Cipher.getInstance("AES/CBC/NoPadding");
            SecretKeySpec keyspec = new SecretKeySpec(key.getBytes(), "AES");
            IvParameterSpec ivspec = new IvParameterSpec(iv.getBytes());

            cipher.init(Cipher.DECRYPT_MODE, keyspec, ivspec);

            byte[] original = cipher.doFinal(encrypted1);
            String originalString = new String(original);
            return originalString.trim();
        } catch (Exception e) {
            e.printStackTrace();
        }
        return null;
    }

}

maven依赖如下:

<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter</artifactId>
</dependency>
<dependency>
    <groupId>org.projectlombok</groupId>
    <artifactId>lombok</artifactId>
    <optional>true</optional>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
    <exclusions>
        <exclusion>
            <groupId>org.junit.vintage</groupId>
            <artifactId>junit-vintage-engine</artifactId>
        </exclusion>
    </exclusions>
</dependency>


登录 后可发表评论

    最新发布
    聚合数据©版权所有