【问题标题】:how do I transfer this python encrypt functions (aes, rsa public key) to php with openssl and rsa?如何使用 openssl 和 rsa 将此 python 加密函数(aes、rsa 公钥)传输到 php?
【发布时间】:2021-05-16 01:22:15
【问题描述】:

您好,我想将这个 python 代码传递给 php,但我不知道如何,所以任何人都可以帮助我或解释一下吗?

这是我用python写的代码。

蟒蛇

from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.asymmetric import rsa, padding
from cryptography.hazmat.primitives.ciphers.aead import AESCCM

def dec_public_key():
    backend = default_backend()
    #
    e = int("103....", 16)
    n = int("DASCGFWQFCA13......", 16)
    public_number = rsa.RSAPublicNumbers(e, n)
    return backend.load_rsa_public_numbers(public_number)

def enc_public_key(public_key, text):
    # here i have some questions, php have PKCS1v15?
    return public_key.encrypt(text, padding.PKCS1v15())

def aes_key():
    # ---
    return AESCCM.generate_key(256)

def nc():
    # random bytes
    return urandom(12)

def encrypt_aes_key(aes_key, nc, text):
    # ..
    cipher = AESCCM(aes_key, tag_length=8)
    return cipher.encrypt(nc, text, None)

php

这是 php 中的代码,但其余部分我不知道......

<?php

function nc() {
    // here generate a random bytes
    return random_bytes(12);
}

function aes_key() {
    # this function generate a random bytes base 256 lenght with the algo aes-256-ccm
    return random_bytes(openssl_cipher_iv_length("aes-256-ccm"));
}

function dec_public_key() {
 ......?
}

function enc_public_key(public_key, text) {
 ......?
}

function encrypt_aes_key(aes_key, nc, text) {
 ......?
}

【问题讨论】:

  • 据我所见,您在 Python 端有混合加密(GCM 模式下的 AES 用于数据加密和 RSA 加密,PKCS1.5 填充用于密钥加密)。两者都可通过 PHP 内置的 OpenSSL 支持获得。在您的公钥上只有一个注释:您以“模数”和“指数”形式拥有它,但 PHP/OpenSSL 只接受 PEM 编码的密钥,因此只需要对其进行转换。请注意,您的问题在 Stackoverflow 上过于宽泛,无法获得“完整”答案。
  • phpseclib 支持在给定模数和指数的情况下导入公钥,但不支持 CCM。 openssl 反过来支持 CCM,但不从模数和指数导入密钥。如果你可以应用 GCM 而不是 CCM,phpseclib 可能是最方便的方法。否则 openssl,而公钥必须事先在外部转换为 X.509/SPKI 格式。

标签: python php python-3.x cryptography


【解决方案1】:

其实我觉得你做不到这个。cryptography.hazmat 是一个大包,如果你真的想把你的程序转换成 php 脚本,我想你必须把 cryptography.hazmat(或功能部分)转换成php.

那你为什么不把这个python加密过程作为php调用的服务呢?

【讨论】:

  • exec('python get_thing.py aes') ? .... 但我认为也有相当简单的方法可以用 php 实现这一点(即没有 python)
  • 我认为你可以将python脚本作为http或socket服务,php可以通过curl调用它
  • 是的,我将它与 exec 和 socket 服务一起使用,但我想将它翻译成 php,我会尝试将“cryptography.hazmat”lib 传递给 php
  • 你想在 php 中进行 rsa 加密和解密,对吗?也许你可以检查一下:stackoverflow.com/questions/4484246/…
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
  • 1970-01-01
  • 2022-12-01
  • 2011-11-07
  • 2018-09-14
相关资源
最近更新 更多