RSA分段加密


1 前言

RSA算法本身要求加密內容,也就是明文長度m,必須滿足 0 < 明文長度m < 密鑰長度n

如果小於這個長度就需要進行 padding,因為如果沒有padding,就無法確定解密后內容的真實長度,字符串之類的內容問題還不大,以 0 作為結束符,但對二進制數據就很難,因為不確定后面的 0 是內容還是內容結束符。而只要用到 padding,那么就要占用實際的明文長度,於是實際明文長度需要減去 padding 字節長度。我們一般使用的 padding 標准有 NoPPadding、OAEPPadding、PKCS1Padding 等,其中 PKCS#1 建議的 padding 就占用了11個字節

這樣,對於 1024 長度的密鑰。128字節(1024bits)減去 11 字節正好是 117 字節,但對於 RSA 加密來講,padding 也是參與加密的,所以,依然按照 1024bits 去理解,但實際的明文只有 117 字節了。

 

如果需要加密的字段過長,就會報錯 Data must not be longer than 117 bytes 。

 

2 分段加密工具類

package com.Util;

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

import javax.crypto.Cipher;
import java.io.ByteArrayOutputStream;
import java.security.Key;
import java.security.KeyFactory;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;

public class RSAUtilBlock {

    /**
     * 標准算法
     */
    private static final String ALGORITHM = "RSA";

    /**
     * 加密算法
     */
    private static final String CIPHER_DE = "RSA";

    /**
     * 解密算法
     */
    private static final String CIPHER_EN = "RSA";

    /**
     * RSA最大加密明文大小
     */
    private static final int MAX_ENCRYPT_BLOCK = 117;

    /**
     * RSA最大解密密文大小
     */
    private static final int MAX_DECRYPT_BLOCK = 128;

    /**
     * 公鑰加密
     *
     * @param data      待加密數據
     * @param publicKey 公鑰
     * @return 加密之后的 RSA 亂碼
     */
    public static String encryptByPublicKey(String data, String publicKey) throws Exception {

        // 待加密的數據轉換成字節數組
        byte[] dataBytes = data.getBytes();
        // 把公鑰使用 decodeBase64 進行編碼,轉化為字節數組
        byte[] keyBytes = Base64.decodeBase64(publicKey);
        // 根據給定的編碼密鑰創建一個新的 X509EncodedKeySpec
        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes);
        // 創建 RSA 密鑰工廠
        KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
        // 生成公鑰對象
        Key key = keyFactory.generatePublic(x509EncodedKeySpec);
        // 創建 Cipher 對象
        Cipher cipher = Cipher.getInstance(CIPHER_EN);
        cipher.init(Cipher.ENCRYPT_MODE, key);

        // 開始分段加密
        int inputLength = dataBytes.length;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int offset = 0;
        byte[] cache;
        int i = 0;
        while (inputLength - offset > 0) {
            if (inputLength - offset > MAX_ENCRYPT_BLOCK) {
                cache = cipher.doFinal(dataBytes, offset, MAX_ENCRYPT_BLOCK);
            } else {
                cache = cipher.doFinal(dataBytes, offset, inputLength - offset);
            }
            out.write(cache, 0, cache.length);
            i++;
            offset = i * MAX_ENCRYPT_BLOCK;
        }
        byte[] encryptedBytes = out.toByteArray();
        out.close();

        // 將加密后的字符數組 base64 解碼之后,轉化為 String 返回
        return new String(Base64.encodeBase64(encryptedBytes));
    }

    /**
     * 私鑰解密
     *
     * @param data       加密后的數據
     * @param privateKey 私鑰
     * @return 解密之后的字符串
     */
    public static String decryptByPrivateKey(String data, String privateKey) throws Exception {

        // 待解密的數據用 base64 編碼轉化為字節數組
        byte[] dataBytes = Base64.decodeBase64(data);
        // 把私鑰使用 decodeBase64 進行編碼,轉化為字節數組
        byte[] keyBytes = Base64.decodeBase64(privateKey);
        // 根據給定的編碼密鑰創建一個新的 X509EncodedKeySpec
        PKCS8EncodedKeySpec pKCS8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);
        // 創建 RSA 密鑰工廠
        KeyFactory keyFactory = KeyFactory.getInstance(ALGORITHM);
        // 生成私鑰對象
        Key key = keyFactory.generatePrivate(pKCS8EncodedKeySpec);
        // 創建 Cipher 對象
        Cipher cipher = Cipher.getInstance(CIPHER_DE);
        cipher.init(Cipher.DECRYPT_MODE, key);

        // 開始分段解密
        int inputLength = dataBytes.length;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        int offset = 0;
        byte[] cache;
        int i = 0;
        while (inputLength - offset > 0) {
            if (inputLength - offset > MAX_DECRYPT_BLOCK) {
                cache = cipher.doFinal(dataBytes, offset, MAX_DECRYPT_BLOCK);
            } else {
                cache = cipher.doFinal(dataBytes, offset, inputLength - offset);
            }
            out.write(cache);
            i++;
            offset = i * MAX_DECRYPT_BLOCK;
        }
        String decryptStr = out.toString();
        out.close();

        return decryptStr;
    }
}

 

3 使用方法

3.1 生成密鑰

搜索 RSA 密鑰生成就能生成對應的公鑰私鑰。

 

 3.2 加密案例

import com.Util.RSAUtilBlock;
import com.alibaba.fastjson.JSONObject;

public class EnCode {

    public static void main(String[] args) throws Exception {

        // 公鑰 
        String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQkOtXgzymCTEf+i248oy3QA9qQYSuIivDAH0dBBiG3aARqbrD0aszuYLdvdYqWrXff13BOZyOdXrnOXTlHvb+DekFzTxtTjiOKGPdECr7umEFF19Ueu5umQsyMEtCKIVxLfZMVyEYIx3Ldd43BI0QBHjUrw80AS2dbvpAT/cbiwIDAQAB";

        // 私鑰
        String privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANCQ61eDPKYJMR/6LbjyjLdAD2pBhK4iK8MAfR0EGIbdoBGpusPRqzO5gt291ipatd9/XcE5nI51euc5dOUe9v4N6QXNPG1OOI4oY90QKvu6YQUXX1R67m6ZCzIwS0IohXEt9kxXIRgjHct13jcEjRAEeNSvDzQBLZ1u+kBP9xuLAgMBAAECgYBkA4qHbaxwpmnDPtIcJVurKHH77y0z37kCisJ0XplwWui+b5ja/DlP1X7W3IjNyK/8W/RWi0zy1403Qks28BFaRu+mJwbqZEsMoiiVC5SlenJLPN5EGh8X7barY7AYBw6/tjafFd3dkmSOu+IPe3i8lTkz9e+I/pMtW9usl7JckQJBAPI0RRmPs+tT2EwwCXa35IKpa1/yG1dYn/BnCTFb7XCC8kdA+60JvLw07JkXHTshghXxKeD37071e4/cXc3JyRkCQQDccibFqxmHu8lDDOM/DJ+YS9++wxCFRM3tXO6QCpTG0Aacj9mPTtv/pLzPIpV8Sxe8UhL3DWmUaYNYOqkTwIpDAkBddsI7jPK3GxHaxKbCQ1BRA6PF0J2wZSjDEl+/xmOoCUAJMxBrw9grIJk0snC7QsD6SqgIgmS8qYpXB4jDQtzxAkEAqwbQ99iX1QumyKNOBtNnWkO7UgeKYKqRzU6lMxFSfbBVANBFrP40hnCrn1Qof6bOwmc2mX9JY0A9C41vMYjWewJBAIt4rlJlP7qxWZCBRTViXiBmRxM6/6JWY9EA2vb220Pfz/1jp/kYb/0EiGE6aFreiMSFYQGq4L9WOjClVQ8D15Y=";

        System.out.println("==========加密身份證信息==========");

        JSONObject idCardJson = new JSONObject();
        idCardJson.put("idcard", "350123197007072434");
        idCardJson.put("idcard1", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard2", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard3", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard4", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard5", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard6", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard7", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard8", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard9", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard11", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard22", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard33", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard44", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard55", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard66", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard77", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard88", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard99", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        idCardJson.put("idcard00", "350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434");
        String idCardString = idCardJson.toJSONString();
        System.out.println("原始身份證數據=" + idCardString);

        String encryptStr = RSAUtilBlock.encryptByPublicKey(idCardString, publicKey);
        System.out.println("加密后=" + encryptStr);
        System.out.println("加密后長度=" + encryptStr.length());

        JSONObject json = new JSONObject();
        json.put("data", encryptStr);
        System.out.println("最終傳輸密文=" + json);

        System.out.println("==========加密成功==========");
    }
}

 

控制台打印出的信息:

==========加密身份證信息==========
原始身份證數據={"idcard11":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard33":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard55":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard77":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard99":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard2":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard1":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard6":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard5":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard4":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard3":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard9":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard8":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard7":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard22":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard44":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard66":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard88":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard00":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard":"350123197007072434"}
加密后=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
加密后長度=3244
最終傳輸密文={"data":"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"}
==========加密成功==========

Process finished with exit code 0

 

3.3 解密案例

import com.Util.RSAUtilBlock;
public class LnDeCode {

    public static void main(String[] args) throws Exception {

        // 公鑰
        String publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDQkOtXgzymCTEf+i248oy3QA9qQYSuIivDAH0dBBiG3aARqbrD0aszuYLdvdYqWrXff13BOZyOdXrnOXTlHvb+DekFzTxtTjiOKGPdECr7umEFF19Ueu5umQsyMEtCKIVxLfZMVyEYIx3Ldd43BI0QBHjUrw80AS2dbvpAT/cbiwIDAQAB";

        // 私鑰
        String privateKey = "MIICdwIBADANBgkqhkiG9w0BAQEFAASCAmEwggJdAgEAAoGBANCQ61eDPKYJMR/6LbjyjLdAD2pBhK4iK8MAfR0EGIbdoBGpusPRqzO5gt291ipatd9/XcE5nI51euc5dOUe9v4N6QXNPG1OOI4oY90QKvu6YQUXX1R67m6ZCzIwS0IohXEt9kxXIRgjHct13jcEjRAEeNSvDzQBLZ1u+kBP9xuLAgMBAAECgYBkA4qHbaxwpmnDPtIcJVurKHH77y0z37kCisJ0XplwWui+b5ja/DlP1X7W3IjNyK/8W/RWi0zy1403Qks28BFaRu+mJwbqZEsMoiiVC5SlenJLPN5EGh8X7barY7AYBw6/tjafFd3dkmSOu+IPe3i8lTkz9e+I/pMtW9usl7JckQJBAPI0RRmPs+tT2EwwCXa35IKpa1/yG1dYn/BnCTFb7XCC8kdA+60JvLw07JkXHTshghXxKeD37071e4/cXc3JyRkCQQDccibFqxmHu8lDDOM/DJ+YS9++wxCFRM3tXO6QCpTG0Aacj9mPTtv/pLzPIpV8Sxe8UhL3DWmUaYNYOqkTwIpDAkBddsI7jPK3GxHaxKbCQ1BRA6PF0J2wZSjDEl+/xmOoCUAJMxBrw9grIJk0snC7QsD6SqgIgmS8qYpXB4jDQtzxAkEAqwbQ99iX1QumyKNOBtNnWkO7UgeKYKqRzU6lMxFSfbBVANBFrP40hnCrn1Qof6bOwmc2mX9JY0A9C41vMYjWewJBAIt4rlJlP7qxWZCBRTViXiBmRxM6/6JWY9EA2vb220Pfz/1jp/kYb/0EiGE6aFreiMSFYQGq4L9WOjClVQ8D15Y=";

        System.out.println("==========解析身份證信息==========");

        String data = "TW/85+d+CCG04yoJCnjpKhBYqANq4WkITVboJcZ74Iz1FLN5Kr+8VIknHUNpl+17gDfeORxrSMoIjHIq8PLzg/M56Dee1jHkk4nZljtFAPX/uhDPmddDKsUMMDNWNliUueAu39jJy3eOQKodjzlTe9xjl3WMIgInwu5Bkkc+Xy5ik/OnzklnlwF10UQ2IpMhqMMRvgYQiFTnHOUmMjxjv9aKkF1V6Q1CpaYhqC0V3fWgbRvntlUoZpiIwZJ2opomFLbuMN3zN71GkFX3oPTs5UgaY8JaPJb79hzw7tATMjDqE566RxqVx9Ykil/Zr861WtrkzGWzregIxa9oyVift3FJhs6yhx9i/v3pMZmAGGFTZadeCu+KsXUVUk60J3bEK6Iz50Q+pjor42X/ULEK0OLfDewzDwQ4ZQdrpICObT0ylzJEFN25ghlY23niB6O4pWHhKRP3W0eQlSYtWlighbxyaCTvjS6mK3qqCTOFqlHyyUuY2zN11gEtKv7mrHVgpBoyi70AvJW5rR11pfUgSBJdtquaCjKF6n1P4a9FYXXXJZlQBuTiVHh8wUH/KgFsJ8kufGJEZ1ZdRaepDTo+1jxni7e1s/gMVmOYqoa0D+j/nCIRAs+rtDlX2h6mTzZ4MK7bNyMGDxwI/hsu5Nq5l1SquLSgxXiD8AH/EhFNlHa2TjNYj6O+ZKLNqlIcrxJXBRVde5P/6s/N0BZYYb7hwKiz++x0rNmU5MoGPeFMMz0oX1kg9zGX0gnZnR5HqKmfQCsFuZB2sVecPLbrMqtq7Vr7QgUfXVoC0JyD5Os9sJ13E3u8sFaDd7TrMkh6+3xzAYFDLgw78JSfOmybU+6IUCBV2N95sRvKn7dBXTtpJ8xT4lxrMImQx+OmufmWY2bzy/oL2f7RXlFBf5taEFMPh9VdoUKfWusEnSP9yZ3Eo9RSqYL0jdDRF5GKHUb34Avdgj3P8TUIbPHc6pqbjcNPK3VfR+C8PF7kDMt36o1tYqRubll6d4baaLBfxMdN5CjctaFvki9qYP9FjpLmQST5d79cjvO6k9n7BP9KrfFHlHdYQb0VG8YqX8kudC8PY1u+qhH20CuW9+V11TxROcZUw2ozPz1nY2p9P+72HQxM5kbaAI3y2cdm9iXfp/djTbGKsvVCqV2w/8eSiu5qD1gyt+gNtPL/r5kDr3hJnByCJagrCr/U8cR6dFU30PWsy5jW8kRC1K0HAwcoU11Hse19R6tuXL+SKV85xY70dFX7XMEV61ze9Ajhd93tl9qcVJnUeJ+/eGm1Ncvjq0ImK52XtA5TRdUaNlMGcj1LyjqHK+813bfS/HLGse7qqxk34+j5DyW8OAN88tkdsqCslztflcyIb24ChQYwM/RyPwACR7w7dalMopvsgB32T6YSClpScnHFrLYaQBX93dlNMuq371VeG+5RKtOPzWFeb8a8epFEzXdKzA4Am3977Tt3qv8aqcpXpoCoKYgk6KW6KTGLbkcOcQ/1KZBBHMIN7A2VtiWxtsYRrJTQtUIE4ArRqskuGxek2pdYFJbmGykfRi9R4CzdQVOrMAb/3ra0zbWNpZv8Q4NOqXNfzh4ddxXlXBl2GvuStx/yCIX76ec8YNQZufaKJwWNunXkUNxpGaAE+DanUImQl2LbmM/co46fP4F0k3EoLH3fNZvXDPtx5LbfFin5uMNEy53ay+4wI/LTY7I9qQ5ehKG2InyaEjwF+T3mSFHy378HSAeKWDDJzvW9XZxXabuGSC1fOqs4QEDzrYsauJoqJ2sKAxqI6PtOlKX7n7PA6uliOAHlrUrJ0fpgeoFONDi2WZ5vEDg3Ql5l2Fm9jrL2nvcmpZKYFLOKgA2oejuh6m/owh0htZee+K8ocC6WnYfSMiFw35eFBfB6O3Aa3Y1t8hQbbeFgdcMgTnsuMN/iDsCrRDkRKjcKN9YPl+aT0YFWA7tfYZwO8rzXLNQ6DN+xK7vxfuldXdvoAWq+tyDLmKUoy7n5G+kfOG6Lj1tMOQoJpozBzTcs44g2pylEwWXNRaa0fqQ7+cSGClOTmovZHwKd+Qg4YwN7fz+4ZG/wXUg3NYfgIfe10ty3UUYq9FkQXyEWsS9GOMv2S8pAOb8+JYb5ImYbVF/uCoHLQSYw1lEkvr+cQjnHA0hJNrTKEJ9IPGnCH6QYR7EdYA6LKU13Pw8QS+CnSLy79Mm+7g23QmOfBpOmn64Eqflc2FkQlDxcq5CXmqzBueFRQgiiPid7yDRWpuEGTtFNkA5Rrf1/qK69O26xF1XFoE0S1Gq3v++mgK79yoNK+cCy3NjsvCpVZk5yu0Ri95qZ4IKIYMH8fJGfYJ3AttMgrmQ2+jAb9kYo21r32whMhAvXAIjCgsBDUczKtEYuqSf0WvlHQMVfpNZjBuz3VWW8ZyrzHq+EWN8LV1RBGl45ykWjcU7QPfeXOVQFKKmu2XLyTQBo916GlbflhwGGH5TOb6otRf6Zcn9S9JXq5fHH15GX6b+FSZN8+NTmYQRG4Tl2oNciZdtiLCcwxPV+xRkP4LKHqFOIqDgaRVn8MnQNhxO7OX2UBywnG5VHw3B8UoHZZPTlrvKQqEheQ+eDOVSpNpHIJHmipEo6Gi9elkcLMYc2o+Ab1kbfU+C1OJVV210Cn0sNboSHPcGi7Hp14D7HCPl84ifmZkCAwbahiBeEx9ViHzwu3ecBKkP+oJUE75tfQ4J1Y4dYBV20i/F3lh2CgQiNiWQHLhXBUGenXSa/oyXX4uJA7+XCBVQc1vZ3JcL+6GXMPB7bdm8r7etjBcID112pJkUkwi4UQw2eG++Rj/wKCfPA3Kz4pEk5XyJsL/jDJR0+qupReXrsJGok06017Sw/P9zWps7Xx9UPMnlz8G5QbumldQcZlpkamx2QRITu5llG4IC4LmYbXshLI9kz+TwrkmSjReEVH/dity7uq8YrIa1IVxuK1KmWE+oOOBItaIaPr7H3YXHSvM5CWIesAfIIWRytrlwQMihVR9s0r9YVhGAsNvjdnj1jWn/jUU1d9ToDfAly/aX4Vt+luXxuaTSPh+y9iAYnvKnFtE27WsfevP/yvhg9m2TMsSE4LBwjtuW1PuNDnHZ/1jfllUUihEi2HCE2BhWn7uArLBO4BgcrxGVa1xMGbNQ8TrAlXwYrSEgYTsjq2ztdW0ei/0rIgiYRWPaYYreBiWyLzxC6xH0/DBphaAnRRySDPk8ghKlku21hJPxWZQt7GfaQuVz964zWYaY=";

        String idCardString = RSAUtilBlock.decryptByPrivateKey(data, privateKey);
        System.out.println("解密后=" + idCardString);
        System.out.println("解密后長度=" + idCardString.length());

        System.out.println("==========解密成功==========");
    }
}

 

控制台打印的信息:

==========解析身份證信息==========
解密后={"idcard11":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard33":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard55":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard77":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard99":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard2":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard1":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard6":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard5":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard4":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard3":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard9":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard8":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard7":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard22":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard44":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard66":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard88":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard00":"350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434350123197007072434","idcard":"350123197007072434"}
解密后長度=2178
==========解密成功==========

Process finished with exit code 0

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM