跳至內容
Astera Technology

附件 base64 值格式錯,為何仍解碼成功?

先核明訂標準編碼格式,不能只憑可解出位元組便收件。

下載完整個案資料及參考答案 ↓

先核來源與已訂規則

本例只收標準字母表及所需補位的標準 base64。Q!UI= 有不支援符號,寬鬆 Buffer 卻仍解成 AB。更正先核格式,再重編碼對原文是否完全一致。

已填假設輸入
紀錄輸入 JSON
原例輸入{"encoded":"Q!UI="}
下載可編輯 CSV ↓

比較兩條實際路徑

更正暫停非標準 Q!UI=。只看解出位元組,不能證明來源表示已符約定傳送格式。

錯誤與更正路徑的輸出
路徑輸出 JSON
錯誤路徑{"accepted":true,"bytes":[65,66]}
更正路徑{"accepted":false,"error":"noncanonical-base64","original":"Q!UI="}
下載可編輯 CSV ↓
本地 Node.js 程序:22.23.3 或 24.14.1
import {DatabaseSync} from 'node:sqlite';
import {TextDecoder} from 'node:util';
import {inflateSync} from 'node:zlib';
import {posix} from 'node:path';
import {createHash} from 'node:crypto';
const rows=(db,sql)=>db.prepare(sql).all().map(r=>({...r}));
const failed=(action)=>{try{action();return null;}catch(e){return {code:e.errcode??e.code??e.name};}};

import assert from 'node:assert/strict';
const run=function run(i,corrected=true){
    const bytes=Buffer.from(i.encoded,'base64');
    if(corrected&&(!/^(?:[A-Za-z0-9+/]{4})*(?:[A-Za-z0-9+/]{2}==|[A-Za-z0-9+/]{3}=)?$/.test(i.encoded)||bytes.toString('base64')!==i.encoded))return {accepted:false,error:'noncanonical-base64',original:i.encoded};
    return {accepted:true,bytes:[...bytes]};
  };
const cases=[{"label":"misleading base","input":{"encoded":"Q!UI="},"expected":{"accepted":true,"bytes":[65,66]},"corrected":false},{"label":"corrected base","input":{"encoded":"Q!UI="},"expected":{"accepted":false,"error":"noncanonical-base64","original":"Q!UI="},"corrected":true},{"label":"canonical two-byte encoding","input":{"encoded":"QUI="},"expected":{"accepted":true,"bytes":[65,66]},"corrected":true},{"label":"canonical empty bytes","input":{"encoded":""},"expected":{"accepted":true,"bytes":[]},"corrected":true}];
for(const test of cases){
  const actual=run(test.input,test.corrected);
  assert.deepEqual(actual,test.expected,test.label);
  console.log(test.label,actual);
}
下載可執行例子 ↓

下次載入前核邊界

QUI= 得 [65,66];此選填內容約定容許標準空編碼,結果為零位元組陣列。

可編輯邊界紀錄及預期輸出
情況輸入 JSON預期輸出 JSON
標準兩位元組編碼{"encoded":"QUI="}{"accepted":true,"bytes":[65,66]}
標準空內容編碼{"encoded":""}{"accepted":true,"bytes":[]}
下載可編輯 CSV ↓

解到 AB,Q!UI= 就合格嗎?

查看參考答案

不是,來源違反明訂格式。錯值留待查,標準 QUI= 才收。

相關資源