guo828587 发表于 2026-5-20 20:06:39

下面这段python的rsa加密,在火山视窗,要如何实现?

def rsa_enc(raw_data: bytes) -> bytes:
    """RSA加密二进制数据,返回二进制"""
    pub = RSA.import_key(base64.b64decode(RSA_PUB_B64))
    cipher = PKCS1_OAEP.new(pub, hashAlgo=SHA256)
    enc_bytes = cipher.encrypt(raw_data)
    return enc_bytes

上面这个,在火山视窗,要如何实现?加解密类好像没有这个。

创世魂 发表于 2026-5-20 21:09:06

加解密类.加密_RSA_公钥 ()

怎么没有啊。rsa都是通用的。

guo828587 发表于 2026-5-20 21:33:23

本帖最后由 guo828587 于 2026-5-20 21:38 编辑

创世魂 发表于 2026-5-20 21:09
加解密类.加密_RSA_公钥 ()

怎么没有啊。rsa都是通用的。
hashAlgo=SHA256怎么传?

Xelloss0618 发表于 2026-5-21 09:22:15

guo828587 发表于 2026-5-20 21:33
hashAlgo=SHA256怎么传?

填充方式用【RSA填充方式.PKCS1_OAEP】,但火山这个命令没封装摘要算法的细节,所以OAEP填充应该是用了默认的SHA1。

guo828587 发表于 2026-5-21 09:49:08

Xelloss0618 发表于 2026-5-21 09:22
填充方式用【RSA填充方式.PKCS1_OAEP】,但火山这个命令没封装摘要算法的细节,所以OAEP填充应该是用了默 ...

所以加密出来就不对了

飞扬工作室 发表于 2026-5-21 11:13:58

直接在火山里面调用这段 python 不就完了,原汁原味

guo828587 发表于 2026-5-21 17:38:27

飞扬工作室 发表于 2026-5-21 11:13
直接在火山里面调用这段 python 不就完了,原汁原味

我这个就是我自己的python项目,想换火山写啊,如果还要调用pytho,我都直接用python了啊,就是不想带一大堆的库。

摘星揽月 发表于 2026-5-21 18:47:33

guo828587 发表于 2026-5-21 17:38
我这个就是我自己的python项目,想换火山写啊,如果还要调用pytho,我都直接用python了啊,就是不想带一 ...

目前,火山会调用python的一大堆文件,并且全部放在程序根目录下,没有放在一个文件夹里。

Xelloss0618 发表于 2026-5-21 18:58:46

试试能不能用

<火山程序 类型 = "通常" 版本 = 1 />

方法 加密_RSA_OAEP_SHA256公钥 <公开 静态 类型 = 字节集类 注释 = "使用公钥对指定数据进行RSA_OAEP_SHA256加密后返回" 返回值注释 = "返回加密后的数据" @禁止流程检查 = 真>
参数 数据 <类型 = 字节集类 注释 = "提供所欲加密的数据." 注释 = "注意输入的数据长度,不能超过(密钥位/8-填充尺寸),例如生成密钥为2048位,无填充的情况下可加密256字节的数据."
      编辑时信息 = "9554C, 0, 0, 0">
参数 指定公钥 <类型 = 字节集类 注释 = "提供本次加密所欲使用的公钥数据">
参数 PKCS8格式 <类型 = 逻辑型 注释 = "指定所提供公钥数据的格式" @默认值 = 假>
{
    @ @an<CVolMem> outData;
    @ int inLen = (int)@<数据>.GetSize();
    @ if ((int)@<指定公钥>.GetSize() == 0 || inLen == 0)
    @   return outData;
    @ RSA * tmpRsa = @dt<加解密类>::VolRSA_GenerateRsa(FALSE, @<指定公钥>, @<PKCS8格式>);
    @ if (!tmpRsa)
    @   return outData;
    @ int rsa_size = RSA_size(tmpRsa);
    @ unsigned char * pOut = (unsigned char *)outData.Alloc(rsa_size, TRUE);
    @ if (RSA_padding_add_PKCS1_OAEP_mgf1(pOut, rsa_size, (unsigned char *)@<数据>.GetPtr(), inLen, NULL, 0, EVP_sha256(), EVP_sha256()) <= 0)
    @ {
    @   outData.Free();
    @   return outData;
    @ }
    @ int outLen = RSA_public_encrypt(rsa_size, pOut, pOut, tmpRsa, RSA_NO_PADDING);
    @ RSA_free(tmpRsa);
    @ if (outLen > 0)
    @   outData.Realloc(outLen);
    @ else
    @   outData.Free();
    @ return outData;
}

飞扬工作室 发表于 2026-5-21 21:57:40

摘星揽月 发表于 2026-5-21 18:47
目前,火山会调用python的一大堆文件,并且全部放在程序根目录下,没有放在一个文件夹里。 ...

这个没有太好的办法,因为是静态链接,除非你自己做个启动器程序.
页: [1] 2
查看完整版本: 下面这段python的rsa加密,在火山视窗,要如何实现?