精易论坛

标题: 弄了一天了 也没弄好 [打印本页]

作者: sphinxes    时间: 昨天 22:55
标题: 弄了一天了 也没弄好
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            try
            {



                string KEY的ras加密 = EncryptWithPublicKey("abc");
                KEY的ras加密 = KEY的ras加密.Replace('+', '-').Replace('/', '_');




                string 加密后的密文 = AesEncrypt("abc");

               加密后的密文  = 加密后的密文.Replace('+', '-').Replace('/', '_');



        }





        static string EncryptWithPublicKey(string plainText)
        {
            // 公钥硬编码在子程序内部
            const string publicKeyPem = @"-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8H6Gp7XP6UvEQzvUgGnt9nPX4exn1aNlmeyloMl6g2rEggeTNMp7I3iLPzQDbt6yedCru971fducKc2DgF/y2CcwA
dqaKdxm0dSI2Zs4QLNYbKwWJ65wkgUh8+TJBnk+PGTgoxZ2wzvhJyRGjGhsFvLmZ
kUYPPxAPSNfjB3+/4wIDAQAB
-----END PUBLIC KEY-----";

            using (RSA rsa = RSA.Create())
            {
                rsa.ImportFromPem(publicKeyPem);               // 加载 PEM 公钥
                byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
                byte[] encryptedBytes = rsa.Encrypt(plainBytes, RSAEncryptionPadding.Pkcs1);
                return Convert.ToBase64String(encryptedBytes);
            }
        }







        private string AesEncrypt(string plaintext)
        {
            string key = "4a2c09ffbc6e7d0414d1ae731e3a0ce5";
            byte[] keyBytes = Encoding.UTF8.GetBytes(key);
            byte[] ivBytes = new byte[16];
            byte[] plainBytes = Encoding.UTF8.GetBytes(plaintext);

            using (Aes aes = Aes.Create())
            {
                aes.Key = keyBytes;
                aes.IV = ivBytes;
                aes.Mode = CipherMode.CBC;
                aes.Padding = PaddingMode.PKCS7;

                using (ICryptoTransform encryptor = aes.CreateEncryptor())
                {
                    byte[] encryptedBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);
                    return Convert.ToBase64String(encryptedBytes);
                }
            }
        }



一个是RSA 公钥加密   一个是Aes 加密
怎么写 才是正确的

对应易语言里面的

KEY的ras加密 = 编码_BASE64编码 (RSA.公钥_加密 (到字节集 (“abc”)))
KEY的ras加密 = 子文本替换 (KEY的ras加密, “+”, “-”, , , 真)  
KEY的ras加密 = 子文本替换 (KEY的ras加密, “/”, “_”, , , 真)  


加密后密文 = 编码_BASE64编码 (对称加密 (文本到UTF8 (“abc”), 到字节集 (“4a2c09ffbc6e7d0414d1ae731e3a0ce5”), #对称算法_AES_256_CBC, #数据填充_PKCS7_PADDING, 取空白字节集 (16)))
加密后密文 = 子文本替换 (加密后密文, “+”, “-”, , , 真)
加密后密文 = 子文本替换 (加密后密文, “/”, “_”, , , 真)

  
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8H6Gp7XP6UvEQzvUgGnt9nPX4exn1aNlmeyloMl6g2rEggeTNMp7I3iLPzQDbt6yedCru971fducKc2DgF/y2CcwA
dqaKdxm0dSI2Zs4QLNYbKwWJ65wkgUh8+TJBnk+PGTgoxZ2wzvhJyRGjGhsFvLmZ
kUYPPxAPSNfjB3+/4wIDAQAB
-----END PUBLIC KEY-----



作者: Marvin    时间: 昨天 22:55
[C#] 纯文本查看 复制代码
private async void Button_Click(object sender, RoutedEventArgs e)
{
    try
    {
        string KEY的ras加密 = EncryptWithPublicKey("abc");
        KEY的ras加密 = KEY的ras加密.Replace('+', '-').Replace('/', '_');

        string 加密后的密文 = AesEncrypt("abc");
        加密后的密文 = 加密后的密文.Replace('+', '-').Replace('/', '_');
    }
    catch (Exception ex)
    {
        // 处理异常
    }
}

static string EncryptWithPublicKey(string plainText)
{
    const string publicKeyPem = @"-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC8H6Gp7XP6UvEQzvUgGnt9nPX4exn1aNlmeyloMl6g2rEggeTNMp7I3iLPzQDbt6yedCru971fducKc2DgF/y2CcwAdqaKdxm0dSI2Zs4QLNYbKwWJ65wkgUh8+TJBnk+PGTgoxZ2wzvhJyRGjGhsFvLmZkUYPPxAPSNfjB3+/4wIDAQAB
-----END PUBLIC KEY-----";

    using (RSA rsa = RSA.Create())
    {
        rsa.ImportFromPem(publicKeyPem);
        byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
        byte[] encryptedBytes = rsa.Encrypt(plainBytes, RSAEncryptionPadding.Pkcs1);
        return Convert.ToBase64String(encryptedBytes);
    }
}

private string AesEncrypt(string plaintext)
{
    string key = "4a2c09ffbc6e7d0414d1ae731e3a0ce5"; // 32字节,AES-256
    byte[] keyBytes = Encoding.UTF8.GetBytes(key); // 正好32字节
    byte[] ivBytes = new byte[16]; // 16字节全0
   
    using (Aes aes = Aes.Create())
    {
        aes.Key = keyBytes;
        aes.IV = ivBytes;
        aes.Mode = CipherMode.CBC;
        aes.Padding = PaddingMode.PKCS7;

        using (ICryptoTransform encryptor = aes.CreateEncryptor())
        {
            byte[] plainBytes = Encoding.UTF8.GetBytes(plaintext);
            byte[] encryptedBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);
            return Convert.ToBase64String(encryptedBytes);
        }
    }
}






保持RSA加密不变(你已经写对了),AES加密的key保持为32字节字符串(对应AES-256),IV使用16字节全0,其他的加密参数和替换逻辑都已经正确

作者: 是永乐哟    时间: 18 小时前
Program.zip (1.07 KB, 下载次数: 4)