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

如何使用rstrip移除Fernet解密字符串前2字符?解决SyntaxError报错

问题根因

  • Fernet.decrypt()返回值是bytes字节类型,打印时看到的b'前缀是Python解释器显示字节类型的标记,不属于解密结果的实际内容,不需要也不应该用字符截取的方式删除。
  • 触发语法错误的原因是最后一行f-string写法完全不符合语法规则:单引号嵌套未正确转义、括号/方括号数量不匹配。
  • 对rstrip()方法的功能理解错误:rstrip()仅用于删除字符串/字节串末尾的匹配字符,无法处理开头内容;且传入b'message'作为参数只会删除末尾连续的m/e/s/a/g字符,和预期效果完全无关。
  • 额外代码问题:打印加密字符串的语句多套了一层括号,会输出元组格式而非正常文本。

正确实现

直接对解密得到的字节串调用decode()转成普通字符串即可,不会带任何b'前缀,也不会损坏原始内容:

from cryptography.fernet import Fernet
from test2 import display

file = 'Fernet'
message = display

key = Fernet.generate_key()
fernet = Fernet(key)
encMessage = fernet.encrypt(message.encode())
decMessage = fernet.decrypt(encMessage).decode()

print("key: ", key)
print("Original string: ", message)
print("encrypted string: ", encMessage)
print(f"decrypted string: {decMessage}")

关于「移除前2个字符」写法的说明

如果只是想了解截取前2个字符的语法(再次强调:这个场景下用截取字符的方式处理b前缀是完全错误的做法,会损坏内容、引入额外bug),Python中截取字符串/字节串前N个字符之后的内容用切片语法[N:]即可,不需要用rstrip:

# 仅作语法演示,请勿在本加解密场景实际使用
demo_bytes = b"test content"
cut_result = demo_bytes[2:] # 得到b"st content"

之前写的报错行存在几个明确语法问题:

  1. f-string外层用单引号包裹,内部写b'message'时未转义单引号,导致字符串提前闭合
  2. 末尾多写了]、)闭合符号,括号层级不匹配
  3. f-string中引用变量需要放在{}内,原写法中[decMessage.xxx]没有加花括号,不会被解析为变量

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.28 13:09:10