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

Python中如何将无空格拼接的ndarray作为Serpent算法输入完成加密

Python实现方案

依赖安装

首先安装所需的第三方库:

pip install numpy pycryptodome

完整实现代码

import numpy as np
from Crypto.Cipher import Serpent
from Crypto.Util.Padding import pad
from Crypto.Random import get_random_bytes

# 1. 处理ndarray转无空格字符串
# 示例ndarray数据
image = np.array([0, 0, 0, 0, 0, 4, 4, 4, 0, 4, 4, 4, 0, 1, 4, 1])
# 拉平数组后逐元素转字符串拼接,适配任意维度的ndarray输入
plain_str = ''.join(map(str, image.flatten()))
print("拼接后的字符串:", plain_str)  # 输出为0000044404440141

# 2. Serpent加密逻辑
# 字符串转字节流,适配加密接口要求
plain_bytes = plain_str.encode("utf-8")
# 生成256位(32字节)随机密钥,也可替换为自定义固定字节密钥,支持16/24/32字节三种长度
key = get_random_bytes(32)
# 初始化Serpent加密器,示例使用ECB模式,如需更高安全性可更换为CBC/GCM等模式
cipher = Serpent.new(key, Serpent.MODE_ECB)
# 对明文做PKCS7填充,适配Serpent128位(16字节)的块大小要求
padded_plain = pad(plain_bytes, Serpent.block_size)
# 执行加密
ciphertext = cipher.encrypt(padded_plain)
# 输出十六进制格式的密文,方便存储传输
print("加密后密文(十六进制):", ciphertext.hex())

注意事项

  • 如果输入的图像ndarray是多维度的(比如常规的HW3彩色图像),flatten()方法会自动按行优先顺序拉平为一维数组,保证拼接顺序和元素原始顺序一致
  • 自定义密钥时必须传入字节类型,长度需为16字节(128位)、24字节(192位)或32字节(256位),不可直接传入字符串
  • 如使用CBC等带偏移量的加密模式,需要额外生成和存储iv参数,解密时需同时使用密钥和iv才能还原数据

内容的提问来源于stack exchange,提问作者علاء الدين محمد العكايله

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.23 14:54:03