<tbody id="k9gos"></tbody>

    卡密解密規范

    PHP代碼示例

    
      $orderNo = "2019090610433272234",//訂單號
      $secret = "256CD47085308ED7009622CBC825EE87",//秘鑰
      $encrypted = "XJC3eYuALfVHn++3lGo8D9eD01KqGULO+7NIo9mdImykg9vzTtINFjRU0zfFQI2G3rtBf8HC+C5D6DPcZBX5OJtAuT/2GJmK5sPkpMAt7fI=",//加密后的卡密字符串
    
    
      1, 計算key:
      $key = md5($orderNo . $secret); //得出:63e14a048bfbc360853736aa6b29b54d,
      $key = substr($key, 4, 8); //得出:4a048bfb,
    
      2, 使用加密后的卡密字符串和key進行DES解密
      $encrypted = base64_decode($encrypted);
      $openssl_options = "des-ede3-cbc";
      $decrypted = openssl_decrypt( $encrypted , $openssl_options, $key, OPENSSL_RAW_DATA);
      $result = rtrim( rtrim( $decrypted,chr(0) ), chr(7) );
    
      得出:"[{"number":"1234567","password":"abcppp","deadline":"2019-12-12 00:00:00"}]"
    

    Java代碼示例

    
      package com.iwankeji.word;
    
      import javax.crypto.Cipher;
      import javax.crypto.SecretKey;
      import javax.crypto.spec.IvParameterSpec;
      import javax.crypto.spec.SecretKeySpec;
      import java.math.BigInteger;
      import java.security.MessageDigest;
      import java.security.spec.AlgorithmParameterSpec;
      import java.util.Base64;
    
      public class Main {
            private static final String ALGORITHM = "DES";
            private static final String CIPHER_TRANSFORMAT = "DES/CBC/PKCS5Padding";
            private static final byte[] DES_IV =  { (byte) 0x00, (byte) 0x00, (byte) 0x00,(byte) 0x00,(byte) 0x00, (byte) 0x00, (byte) 0x00,(byte) 0x00 };
    
            public static String decryptFromBase64(String base64, String key) throws Exception {
                    Cipher c1 = Cipher.getInstance(CIPHER_TRANSFORMAT);
                    SecretKey deskey = new SecretKeySpec(key.getBytes(), ALGORITHM);
    
                    IvParameterSpec iv = new IvParameterSpec(DES_IV);
                    AlgorithmParameterSpec paramSpec = iv;
                    c1.init(Cipher.DECRYPT_MODE, deskey, paramSpec);
                    byte[] result = c1.doFinal(Base64.getDecoder().decode(base64));
                    return new String(result, ENCODING);
            }
    
            public static void main(String[] args) {
                    // write your code here
                     try {
                        //待解密的字符串
                        String soureString ="XJC3eYuALfVHn++3lGo8D9eD01KqGULO+7NIo9mdImykg9vzTtINFjRU0zfFQI2G3rtBf8HC+C5D6DPcZBX5OJtAuT/2GJmK5sPkpMAt7fI=";
                        String orderNO = "2019090610433272234";  //訂單號
                        String secret = "256CD47085308ED7009622CBC825EE87";  //密鑰
                        // key 是 md5(訂單號 + 密鑰)后的字符串截取4-12位
                        String key = "";
                        MessageDigest md5 = MessageDigest.getInstance("MD5");
                        md5.update(keyString.getBytes());
    
                        byte b[] = md5.digest();
                        int i;
                        StringBuffer buf = new StringBuffer("");
                        
                        for (int offset = 0; offset < b.length; offset++) {
                            i = b[offset];
                            if (i < 0)
                                i += 256;
                            if (i < 16)
                                buf.append("0");
                            buf.append(Integer.toHexString(i));
                        }
                        key = buf.toString();
                        key = key.substring(4, 12);
    
                        String decodeString = decryptFromBase64(soureString, key);
                        System.out.printf("解密后的字符串:" + decodeString);
    
                        //解密后的字符串:[{"number":"1234567","password":"abcppp","deadline":"2019-12-12 00:00:00"}]
                    
                    } catch (Exception e) {
                        System.out.print(e);
                    }
                    
            }
    }
    午夜精品久久久久久久99_午夜精品久久久久久久99热_午夜精品久久久久久久尤物_无码