麟儿-萌芽 2023-01-30 12:56 采纳率: 0%
浏览 28

android, java, aes加密,python

安卓AES 加密 用python 翻译后 加密结果不一致

private static byte[] iv = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16};
/**
     * AES加密字符串
     *
     * @param content  需要被加密的字符串
     * @param password 加密需要的密码
     * @return 密文
     */
    public static byte[] encrypt(byte[] content, byte[] password) {
        try {
            if (password.length != 16) {
                password = Arrays.copyOfRange(password, 0, 16);
            }
            KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者
            SecretKeySpec key = new SecretKeySpec(password, "AES");// 转换为AES专用密钥
            Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");// 创建密码器
            cipher.init(Cipher.ENCRYPT_MODE, key, new IvParameterSpec(iv));// 初始化为加密模式的密码器
            return cipher.doFinal(content);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
    }

img

python

# 加密函数
def aes_cbc_encrypt(password: str) -> bytes:
    # 这里 md5 加密了密码
    md = hashlib.md5()
    md.update(password.encode())
    password_md5 = md.hexdigest()
    print(f"密码md5:{password_md5}")

    key = password_md5.encode()
    print("key", key)

    iv = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16]
    iv_byte = bytes(i % 256 for i in iv)
    print("iv_byte", iv_byte)

    cryptos = AES.new(key, AES.MODE_CBC, iv_byte)
    cipher_text = cryptos.encrypt(password_md5.encode())
    # 因为AES加密后的字符串不一定是ascii字符集的,输出保存可能存在问题,所以这里转为16进制字符串
    aes_cbc_text = b2a_hex(cipher_text)

    print(f"AES 后的密码:{aes_cbc_text}")
    return aes_cbc_text

  • 写回答

2条回答 默认 最新

  • pzzhao 2023-01-30 14:31
    关注

    你的python代码是不是多加了一步md5

    评论

报告相同问题?

问题事件

  • 创建了问题 1月30日

悬赏问题

  • ¥20 双层网络上信息-疾病传播
  • ¥50 paddlepaddle pinn
  • ¥20 idea运行测试代码报错问题
  • ¥15 网络监控:网络故障告警通知
  • ¥15 django项目运行报编码错误
  • ¥15 请问这个是什么意思?
  • ¥15 STM32驱动继电器
  • ¥15 Windows server update services
  • ¥15 关于#c语言#的问题:我现在在做一个墨水屏设计,2.9英寸的小屏怎么换4.2英寸大屏
  • ¥15 模糊pid与pid仿真结果几乎一样