第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

解密時出現(xiàn)隨機 IllegalBlockSizeException

解密時出現(xiàn)隨機 IllegalBlockSizeException

慕桂英546537 2021-12-30 20:29:33
我在解密文本時遇到了一些問題:我的后端在解密過程中經常拋出 IllegalBlockSizeException:javax.crypto.IllegalBlockSizeException: Input length must be multiple of 16 when decrypting with padded cipher當我再次嘗試(1-3 次)時,它終于可以成功解密 SAME 文本并將響應發(fā)送給 FE。正如我注意到的那樣,當我嘗試在短時間內解密許多(大約 100 個)字符串時,通常會發(fā)生這種情況(2 個請求來自 FE,從 db/請求查詢 15 個記錄,2 個加密字段/記錄)我的服務器在帶有 Raspbian 的 Raspberry Pi B+ 上運行?!捌胀ā盤C 上不存在此問題。加密類:package bookmarks.common.encryption.base;import java.nio.charset.StandardCharsets;import java.security.InvalidKeyException;import java.security.Key;import java.security.NoSuchAlgorithmException;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.SecretKeySpec;import org.apache.commons.net.util.Base64;import lombok.extern.slf4j.Slf4j;@Slf4jpublic class DefaultEncryptor {    private static final int SIZE = 16;    private static final String ALGORITHM = "AES";    private static final Base64 BASE_64 = new Base64();    private final Key key;    private final Cipher cipher;    public DefaultEncryptor(String password) {        byte[] key = createKey(password);        this.key = new SecretKeySpec(key, ALGORITHM);        try {            cipher = Cipher.getInstance(ALGORITHM);        } catch (NoSuchAlgorithmException | NoSuchPaddingException e) {            log.error("Error creating encryptor.", e);            throw new RuntimeException(e);        }    }    private byte[] createKey(String password) {        if (password.length() < SIZE) {            int missingLength = SIZE - password.length();            StringBuilder passwordBuilder = new StringBuilder(password);            for (int i = 0; i < missingLength; i++) {                passwordBuilder.append(" ");            }            password = passwordBuilder.toString();        }        return password.substring(0, SIZE).getBytes(StandardCharsets.UTF_8);    }有什么想法會導致問題嗎?
查看完整描述

2 回答

?
浮云間

TA貢獻1829條經驗 獲得超4個贊

僅使用AES沒有 IV 的密碼意味著使用AES/ECB/PKCS5Padding. 此密碼和模式要求解密輸入是塊大?。?28 位)的倍數(shù)

  Input length must be multiple of 16 when decrypting with padded cipher

密碼抱怨輸入不是 16 的倍數(shù)

正如我注意到的那樣,當我嘗試在短時間內解密許多(大約 100 個)字符串時,通常會發(fā)生這種情況

我想到了什么(正如詹姆斯評論的那樣,這是我有根據(jù)的猜測),密碼對象不是線程安全的。我很有信心地說要么

  • 輸入被傳遞為不完整(您可能想要記錄輸入字節(jié)數(shù)組長度)

  • 有多個線程重用同一個密碼對象


查看完整回答
反對 回復 2021-12-30
?
開心每一天1111

TA貢獻1836條經驗 獲得超13個贊

問題是靜態(tài)常量 BASE_64,什么不是線程安全的。當多個請求同時到達時,spring-boot并行處理,base64解碼返回損壞結果,當然無效數(shù)據(jù)無法解密。


查看完整回答
反對 回復 2021-12-30
  • 2 回答
  • 0 關注
  • 1237 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號