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

如何正确使用Plug.Crypto.decrypt?解密字符串遇函数匹配错误

正确解密Plug.Crypto加密字符串的方法

问题原因

你调用的decrypt/2和decrypt/3都不是Plug.Crypto提供的合法函数签名,Plug.Crypto仅提供decrypt/4用于解密,因此触发FunctionClauseError。

正确解密步骤

当你使用Plug.Crypto.encrypt/3(即Plug.Crypto.encrypt(key, plaintext, opts))加密时,函数会自动生成随机初始化向量(IV),并将IV + 密文拼接成一个二进制返回。解密时需要先拆分出IV和密文,再调用decrypt/4:

  1. 拆分IV与密文
    Plug.Crypto默认使用AES-GCM算法,对应的IV长度为12字节,按此长度拆分:

    iv_size = 12
    <<iv::binary-size(iv_size), ciphertext::binary>> = enc_str
    
  2. 调用decrypt/4解密
    使用加密时的密钥、拆分出的IV和密文,加上选项参数(空列表即可)执行解密:

    raw_string = Plug.Crypto.decrypt("my_secret", ciphertext, iv, [])
    

关键文档要点翻译

官方decrypt/4函数说明

Plug.Crypto.decrypt(key, ciphertext, iv, opts \\ [])

  • 功能:通过指定密钥、密文、初始化向量(IV)和选项完成解密
  • 参数:
    • key:加密时使用的密钥,需符合对应算法的长度要求(AES-GCM支持16/24/32字节密钥)
    • ciphertext:加密后的纯密文部分(需从encrypt/3返回的二进制中拆分)
    • iv:加密时生成的初始化向量,必须与加密时的IV完全一致
    • opts:可选配置列表,例如:algorithm可指定加密算法(默认:aes_gcm)
  • 返回值:成功返回明文,失败则抛出错误

第三方博客核心结论

  • Plug.Crypto.encrypt/3会自动生成随机IV,并将IV与密文拼接后返回
  • 解密必须先拆分IV和密文,再调用decrypt/4
  • 密钥安全性和合规长度是加密/解密成功的前提,AES-GCM还会自动验证密文完整性,篡改后的密文无法解密

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 08:59:15