插件窝 干货文章 JS与Python AES解密代码差异:Base64编码错误如何排查?

JS与Python AES解密代码差异:Base64编码错误如何排查?

encoded JavaScript 编码 decode 630    来源:    2025-03-13

在JavaScript和Python中使用AES解密时,Base64编码错误是一个常见问题。以下是一些排查步骤和解决方案:

1. 确认Base64编码格式

  • JavaScript:通常使用atobbtoa进行Base64编码和解码。确保输入和输出的字符串是标准的Base64格式。
  • Python:使用base64模块进行编码和解码。确保使用base64.b64encodebase64.b64decode

2. 检查填充(Padding)

  • JavaScriptatobbtoa对填充字符(=)的处理可能不一致。确保在解码前添加必要的填充字符。
  • Pythonbase64.b64decode会自动处理填充字符,但确保输入字符串的填充字符正确。

3. 编码和解码一致性

  • JavaScriptjavascript // 编码 let encoded = btoa("Hello World"); // 解码 let decoded = atob(encoded);
  • Pythonpython import base64 # 编码 encoded = base64.b64encode(b"Hello World").decode('utf-8') # 解码 decoded = base64.b64decode(encoded).decode('utf-8')

4. 处理URL安全的Base64

  • JavaScript:如果使用URL安全的Base64,需要替换+/-_,并去除填充字符。 javascript function urlSafeBtoa(str) { return btoa(str).replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, ''); }
  • Python:使用base64.urlsafe_b64encodebase64.urlsafe_b64decodepython import base64 # 编码 encoded = base64.urlsafe_b64encode(b"Hello World").decode('utf-8') # 解码 decoded = base64.urlsafe_b64decode(encoded).decode('utf-8')

5. 调试和日志

  • JavaScript:使用console.log输出编码前后的字符串,检查是否有不一致。
  • Python:使用print输出编码前后的字符串,检查是否有不一致。

6. 示例代码

  • JavaScriptjavascript let plaintext = "Hello World"; let encoded = btoa(plaintext); console.log("Encoded:", encoded); let decoded = atob(encoded); console.log("Decoded:", decoded);
  • Pythonpython import base64 plaintext = "Hello World" encoded = base64.b64encode(plaintext.encode('utf-8')).decode('utf-8') print("Encoded:", encoded) decoded = base64.b64decode(encoded).decode('utf-8') print("Decoded:", decoded)

通过以上步骤,可以排查和解决JavaScript和Python中AES解密时Base64编码错误的问题。