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

如何将PHP OpenSSL加密调用改写为.NET 6 Cryptography实现

.NET 6 对应加密逻辑实现

核心逻辑对齐说明

你提供的PHP代码做了三件事:

  1. 生成16字节随机AES密钥
  2. 用AES-128-ECB算法、PKCS7填充加密明文,直接输出二进制密文
  3. 用RSA私钥以PKCS#1 v1.5填充加密AES密钥,输出加密后的AES密钥

.NET 6 可以直接用内置的System.Security.Cryptography命名空间完成全部逻辑,无需引入第三方包。

完整实现代码

using System.Security.Cryptography;
using System.Text;

// 输入参数
string plainText = "Test payload";
string privateKeyPem = "-----BEGIN RSA PRIVATE KEY----- ... ";

// 1. 生成16字节AES密钥
byte[] aesKey = RandomNumberGenerator.GetBytes(16);

// 2. AES-128-ECB 加密明文
byte[] encryptedText;
using (Aes aes = Aes.Create())
{
    aes.Key = aesKey;
    aes.Mode = CipherMode.ECB;
    aes.Padding = PaddingMode.PKCS7; // 对齐PHP openssl_encrypt默认填充规则

    ICryptoTransform encryptor = aes.CreateEncryptor();
    byte[] plainTextBytes = Encoding.UTF8.GetBytes(plainText);
    encryptedText = encryptor.TransformFinalBlock(plainTextBytes, 0, plainTextBytes.Length);
}

// 3. RSA私钥加密AES密钥
byte[] aesKeyEncrypted;
using (RSA rsa = RSA.Create())
{
    // 导入PEM格式私钥,如果私钥加密请用ImportFromEncryptedPem方法
    rsa.ImportFromPem(privateKeyPem);
    // 对齐PHP openssl_private_encrypt默认的PKCS#1填充规则
    aesKeyEncrypted = rsa.SignData(aesKey, HashAlgorithmName.None, RSASignaturePadding.Pkcs1);
}

// 输出结果,如需转base64传输可调用Convert.ToBase64String
// Console.WriteLine(Convert.ToBase64String(encryptedText));
// Console.WriteLine(Convert.ToBase64String(aesKeyEncrypted));

注意事项

  • 如果第三方服务解析明文使用的不是UTF-8编码,请调整Encoding.UTF8.GetBytes的编码类型,和服务端对齐
  • 如果你的RSA私钥是带密码的加密格式,请将ImportFromPem替换为ImportFromEncryptedPem(privateKeyPem, "私钥密码")
  • ECB模式安全性较低,此处仅为对齐第三方接口要求,自主设计加密方案时不推荐使用

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 13:27:03