php 调用python解密 AES-128-GCM

这篇具有很好参考价值的文章主要介绍了php 调用python解密 AES-128-GCM。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

因工作需要,要解密Java AES-128-GCM iv=16 模式的加密密文,找了php的很多方法,都无法解密成功,最后找了一个使用python3进行解密的方法,下面是解密方法:

主要是运用php的函数exec()执行Linux命令调用python运行python文件,获得返回结果。

// Java加密的密文
$encryptedDataB64 = file_get_contents("php://input");

// 有执行权限的Python文件路径
$pyfile = "/root/gcm.py";
 
// 执行Python文件
$result = exec("python3 {$pyfile} {$encryptedDataB64} 2>&1");
 
// 输出执行结果
echo $result;

注:此AES解密要用到python 3的 库 Cryptodome,所以,如果你服务器没有这个库 Cryptodome,要安装一下:

pip3 install pycryptodome

gcm.py文件内容:

import base64
import sys

# print(sys.path)

# 在导入一个模块(Cryptodome)时,Python会在sys.path列表中的路径中查找该模块。
# 因此,如果模块在sys.path中不存在,Python就无法找到该模块,可以通过下面的代码来添加路径。如果存在,下面这行可以不运行。
# sys.path.append(r'/usr/local/lib/python3/dist-packages')

# 导入AES
from Cryptodome.Cipher import AES

# php执行exec()函数传来的密文参数
encryptedDataB64 = sys.argv[1]

encryptedData = base64.b64decode(encryptedDataB64)
nonce = encryptedData[:16] # 这行的16,是因为Java那边加密时iv设置的是16,所以要改成16
ciphertext = encryptedData[16:-16] # 这行前面的一个16也是同上
tag = encryptedData[-16:]

# 秘钥,下面key里面单引号部分的才是秘钥
key = b'uMV7abuWIqz7aoz8mxZhw41rtrcY6unL'
try:
    cipher = AES.new(key, AES.MODE_GCM, nonce)
    decryptedData = cipher.decrypt_and_verify(ciphertext, tag)
    print(decryptedData) # use authenticated data
except ValueError:
    print('Decryption failed')

最后,AES加解密分多种模式,大家在进行AES加解密时要先了解清楚具体的模式才能更好的解决问题。文章来源地址https://www.toymoban.com/news/detail-801098.html

到了这里,关于php 调用python解密 AES-128-GCM的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 20230721在WIN10下安装openssl并解密AES-128加密的ts视频切片

    20230721在WIN10下安装openssl并解密AES-128加密的ts视频切片 2023/7/21 22:58 1、前言: AES-128加密的ts视频切片【第一个】,打开有时间限制的! https://app1ce7glfm1187.h5.xiaoeknow.com/v2/course/alive/l_64af6130e4b03e4b54da1681?type=2app_id=app1cE7gLFM1187pro_id=term_645c69388953e_Nhew9Aavailable=trueshare_user_id=u_5e591188

    2024年02月16日
    浏览(38)
  • PHP AES加解密系列

    使用PHP内置的mcrypt扩展库可以轻松地实现AES加密。 使用PHP内置的mcrypt扩展库也可以轻松地实现AES解密。 以上就是PHP AES加解密的简单实现方法。需要注意的是,mcrypt扩展库已经在PHP7.2版本中被废弃,建议使用其他扩展库或者使用PHP7.2以上版本内置的openssl扩展库实现AES加解密。

    2024年01月25日
    浏览(32)
  • php对称加密AES加密解密

    AES-128-ECB和AES-256-CBC是两种常见的AES加密模式,它们在加密方式和安全性上有以下区别: 加密方式: AES-128-ECB:ECB(Electronic Codebook)模式是最简单的AES加密模式,它将数据分成固定大小的块,每个块独立加密。这意味着相同的明文块将始终加密为相同的密文块,因此ECB模式不

    2024年02月09日
    浏览(62)
  • python实现AES-128#实现加密字符串和加密文件

    这篇文章是对之前的一篇文章的重写和优化AES加密算法基于python实现 脚本语言:Python 已实现的功能 明文和密密钥可以是任意字符:中文,字符,数字或符号。 ​ 明文长度任意,密钥的字节数不能超过16字节。默认编码为utf-8所以,密钥最多支持5个中文字符 待加密的数据:可

    2024年02月12日
    浏览(90)
  • go语言使用AES加密解密

    Go语言提供了标准库中的crypto/aes包来支持AES加密和解密。下面是使用AES-128-CBC模式加密和解密的示例代码:

    2024年02月06日
    浏览(72)
  • python 使用AES加解密

        什么是AES自己百度查下吧,直接上代码喽!      import base64 from Crypto import Random from Crypto.Cipher import AES \\\"\\\"\\\" 创建aes实例, 参数: key秘钥(16, 24, 32, 目前16就可以了); mode加密方式这里采用CBC(分组); iv位移, 使用自带AES.block_size代表16位 常见加密模式: CBC密码分组, CFB密码反馈, O

    2023年04月08日
    浏览(33)
  • Jmeter 二次开发 函数助手 AES加解密

    IDE :IntelliJ IDEA 2021.1.1 x64 JAVA环境 :jdk1.8.0_251 离线导包 :导入Jmeter安装目录下lib/ext下的ApacheJmeter_function.jar 和 ApacheJmeter_cotre 重点 : 程序依赖的jar包需要放在ext路径下 程序依赖的class需要放在 ApacheJmeter_function 中,和新开发的class放在同级 以AES CBC加密为例 https://download.csd

    2024年02月12日
    浏览(42)
  • Python学习笔记——AES 加密/解密

    AES,高级加密标准。目前比较流行的对称加密算法。是一种对称加密算法,即加密和解密都用相同的密钥。 AES只是个基本算法,实现AES有几种模式,主要有ECB、CBC、CFB等几种模式。CBC模式中还有一个偏移量参数IV。 AES加密有AES-128、AES-192和AES-256三种,分别对应三种密钥长

    2023年04月15日
    浏览(45)
  • AES加密解密python实现

            关于现代密码学算法,可以查看以下博客全面了解 CISSP考试要求里的“应用密码学”内容辅助记忆趣味串讲_晓翔仔的博客-CSDN博客         AES的细节知识,可以查阅 AES加密算法的详细介绍与实现_TimeShatter的博客-CSDN博客          AES 加密最常用的模式就是

    2024年02月05日
    浏览(77)
  • 用java语言写一个AES算法,使用AES(CBC模式)对数据进行加密或解密。加解密用到的密钥(Key)和密钥偏移量(IV),代码实例类编写。

    以下是一个使用Java编写的AES算法实例,使用AES(CBC模式)对数据进行加密和解密。代码中包括了生成随机密钥和密钥偏移量的方法。 java Copy code import javax.crypto.*; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; import java.security.InvalidAlgorithmParameterException; import

    2024年02月07日
    浏览(61)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包