package com.demo.common;

import com.demo.util.SecretUtil;
import com.reyun.Algorithm;


/**
 * 用于特殊处理加密
 */
public class SpecialSecret {

    public static  final String dllPath = "/data/application/deviceCheck/crypto/libcrypto.so";
    static {
        System.load(dllPath);
//        Algorithm.InitCrypto();
    }



    /**
     *
     * 解密数据
     * @param secretData
     * @param key
     * @return
     */
    public static String getData(String secretData, String key){
        Algorithm alg = new Algorithm();
        return alg.aes256Decode(secretData, key);
    }

    /**
     * aes加密data
     * @param data
     * @param key
     * @return
     */
    public static String aesData(String data, String key){
        Algorithm alg = new Algorithm();
        return alg.aes256Encode(data, key);
    }

    /**
     *
     *
     * 对于AES密钥的处理
     * 6字节随机数+真实密钥+8字节随机数->反转
     * 然后拿私钥钥进行RSA加密
     * @param str
     * @param privateKey
     * @return
     */
    public static String getSecretAesStr(String str, String privateKey) throws Exception{

        Algorithm alg = new Algorithm();
        String aesStr = SecretUtil.getRandNum(6) + str + SecretUtil.getRandNum(8);
        str = reverseString(aesStr);
        return  alg.rsaPrivateEncode(str, privateKey);
    }

    /**
     *
     * 对于RSA 公钥的处理
     *da
     * 6字节随机数+真实密钥+8字节随机数->反转
     * @param str
     * @return
     */
    public static String getSecretRSAStr(String str){

        String rsaStr = SecretUtil.getRandNum(6) + str + SecretUtil.getRandNum(8);
        return reverseString(rsaStr);
    }

    private static String reverseString(String str) {
        StringBuffer buffer = new StringBuffer(str);
        return buffer.reverse().toString();
    }



//    public static void main(String args[]) throws Exception{
//
////        System.out.println("开始测试-----------");
//////        System.load("C:\\eclipseWorkSpace\\mongodb-demo\\lib\\crypto.dll");
//////        DllAddUtil.addLibraryDir("C:\\eclipseWorkSpace\\mongodb-demo\\lib\\crypto.dll");
////
////        String dllPath = System.getProperty("user.dir") + "/lib/crypto.dll";
////        System.out.println(System.getProperty("user.dir"));
////
////        DllAddUtil.addLibraryDir("dllPath");
//////        System.out.println(System.getProperty("java.library.path"));
//////        System.loadLibrary("crypto");
////        System.load(dllPath);
////        Algorithm alg = new Algorithm();
////        String txt = "小红帽123";
////        String pubkey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCLtMtk2fLimNPRK5rG0jVBeX8kSO8CP8aMkeu7" +
////                "N94ieqQqhbBArhdA7b5/kd6durfY5dq7NWAPQAK8+/P3XE92qdkshcgX9bYqO9dvE1fSgtLZN1OK" +
////                "Pgm1quNZT5fqxOMQZwancRdqgt53aEjvjANtIoOCNV2QkPsl0a0icGmTXQIDAQAB";
////        String privateKey = "MIICdQIBADANBgkqhkiG9w0BAQEFAASCAl8wggJbAgEAAoGBAIu0y2TZ8uKY09ErmsbSNUF5fyRI" +
////                "7wI/xoyR67s33iJ6pCqFsECuF0Dtvn+R3p26t9jl2rs1YA9AArz78/dcT3ap2SyFyBf1tio7128T" +
////                "V9KC0tk3U4o+CbWq41lPl+rE4xBnBqdxF2qC3ndoSO+MA20ig4I1XZCQ+yXRrSJwaZNdAgMBAAEC" +
////                "gYBJ2EGeSDnDHobvzD2elCQEPMVAl7CGHtHDIapZplkrHmpB87JLLfoqnsAPzDnAY56j7jMkuzzQ" +
////                "MsR/wimdeVSimfqlgpTe1KNIdOkZnppAbEijqhngJhUXFNJMmhUyHSaRd1AQ5aYZoIsIyndP13TM" +
////                "RQyX883sbKISIEX7qajxPQJBANZi58PWH9Xg5nrNi6zm0bDvmQe9QIQR03Mv4pWcPmzIcbNCWDeK" +
////                "Nlp9Wqr66jDc7YUkxfAjnDuLsE8g9OzpGBMCQQCm0vORg+BF1QFcLpdG7lilqFZbqjl/hLFzeCAp" +
////                "4L4GrMqSFhYs6h/pWg9FYpPvSY8grZo4qgX97t+QAvHAr/TPAkAPvA6alvqbLfh8ht17gS1euRcY" +
////                "NFGp380PJTKSHHeQcF239GSZHvHCTnT7G5NYpr5gCUTlzRdIX4Y/KIIRaUI1AkARFIwnm+78d2Ca" +
////                "RZLrij+9Rk0BOZ6FddqNTgFNCFusZ0ieSHCgzJ/Tzoq9uegXmdpzqBKgNphCdZCiOAr0hY91AkAt" +
////                "tN1h4g3LA1fhq0MvwgtNb9fVdSDoqCOSELQjKsqQach99kaMApo3uBLpCypAyi2X99i31SDEH/XO" +
////                "ytCzS3IG";
////        String str = alg.rsaPrivateEncode(txt,privateKey);
////        System.out.println("rsa加密后:"+str);
////
////        System.out.println("rsa解密后:"+alg.rsaPublicDecode(str,pubkey));
////
////
////        System.out.println("结束测试-----------");
////
////        System.out.println("开始测试SHA-----------");
////        String shaStr  =  alg.sha1(txt);
////        System.out.println("sha加密后:"+str);
////
////        System.out.println("结束测试SHA-----------");
//
//
////        System.out.println("开始测试aes-----------");
////        txt="123";
////        String aesKey = "5662e7c3d61fd5e0e67acd8bace6d1b0";
////        String aesStr  =  alg.aes256Encode(txt,aesKey);
////        System.out.println("aes加密后:"+aesStr);
////        String aesdecodeStr  =  alg.aes256Decode(aesStr,aesKey);
////        System.out.println("aes解密后:"+aesdecodeStr);
//
////        System.out.println("结束测试aes-----------");
//
//        String data =  "ajTGaaaaqJ1ymOOGL5UCvY0Q2CKsla==";
//        String aesKey = "5662e7c3d61fd5e0e67acd8bace6d1b0ef9907bd408411d3732fe2959c3e6cc8";
//        String result = SpecialSecret.aesData(data, aesKey);
//        System.out.println("result is "+ result);
//
//
//
//    }

}