天天看點

java實作SM4 PKCS7Padding填充模式的還原

上篇用Java實作了SM4的PKCS7Padding填充模式,本篇是對填充後的還原。

    public static byte[] PKCS7PaddingRestore(byte[] paramArray) throws Exception {

        if (isEmpty(paramArray)) {

            throw new Exception("資料異常,位元組填充還原錯誤,參數為空!");

        }

        try {

            // 定義是否需要消除填充資料

            boolean needRestore = true;

            int length = paramArray.length;// 擷取字元串長度

            // 拆分并擷取最後一組16倍數數值

            byte[] paramByteLast = Arrays.copyOfRange(paramArray, length - 16, length);

            // 擷取最後一個位元組

            byte byteLast = paramByteLast[paramByteLast.length - 1];

            // 開始填充位元組位置

            int paddingNum = paramByteLast.length - byteLast;

            if (paddingNum > 0) {

                // 判斷數組位元組位數的位元組是否與最後位元組相等

                for (int i = paddingNum; i < paramByteLast.length; i++) {

                    byte paramSon = paramByteLast[i];

                    if (byteLast != paramSon) {

                        needRestore = false;

                    }

                }

            } else {

                needRestore = false;

            }

            if (needRestore) {

                // 組合新數組并傳回

                byte[] resultArray = Arrays.copyOfRange(paramArray, 0, length - byteLast);

                return resultArray;

            }

            return paramArray;

        } catch (Exception e) {

            throw new Exception("資料異常,位元組填充還原錯誤,異常抛出!" + e.getMessage());

        }

    }