You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python生成API令牌时加密结果额外带b'与'的问题及解决

解决Python AES加密输出带b''前缀的问题

我正在为树莓派和Web服务器之间的通信开发带令牌的API,用Python实现AES加密生成令牌,但遇到了一个小问题:脚本输出的加密字符串前后总是带有b'和',示例输出如下:

C:\Python36-32>python.exe encrypt.py
b'Qge6lbC+SulFgTk/7TZ0TKHUP0SFS8G+nd5un4iv9iI='
C:\Python36-32>python.exe encrypt.py
b'DTcotcaU98QkRxCzRR01hh4yqqyC92u4oAuf0bSrQZQ='

问题原因

这其实是Python 3中**字节类型(bytes)与字符串类型(str)**的区别导致的:

  • base64.b64encode()函数返回的结果是bytes对象,而不是我们习惯的字符串。
  • 当直接打印bytes对象时,Python会自动用b'...'的格式来标记这是字节数据,而非普通字符串。

解决方案

只需要将bytes对象解码为UTF-8格式的字符串即可,添加一行代码:

sendtoken = encoded.decode('utf-8')

之后打印sendtoken就不会再出现b'前缀了。

修改后的完整代码示例

from Crypto.Cipher import AES
import base64
import os
import time
import datetime
import requests

BLOCK_SIZE = 32
BLOCK_SZ = 14

salt = "123456789123"  # Zorg dat de salt altijd even lang is! (12 Chars)
iv = "1234567891234567"  # Zorg dat de salt altijd even lang is! (16 Chars)

currentDate = time.strftime("%d%m%Y")
currentTime = time.strftime("%H%M")

PADDING = '{'
pad = lambda s: s + (BLOCK_SIZE - len(s) % BLOCK_SIZE) * PADDING
EncodeAES = lambda c, s: base64.b64encode(c.encrypt(pad(s)))
DecodeAES = lambda c, e: c.decrypt(base64.b64decode(e)).rstrip(PADDING)

secret = salt + currentTime
cipher = AES.new(key=secret, mode=AES.MODE_CBC, IV=iv)
encode = currentDate
encoded = EncodeAES(cipher, encode)

# 修复:将bytes解码为UTF-8字符串
sendtoken = encoded.decode('utf-8')
print(sendtoken)

内容的提问来源于stack exchange,提问作者Danny Phantom

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.29 07:56:28