C# 和 PHP 的 DES 加密解密要保持一致,需要确保它们使用相同的密钥、加密模式、填充方式和数据类型。以下是 C# 和 PHP 之间实现 DES 加密解密的示例。
C# 示例(加密):
using System;
using System.IO;
using System.Security.Cryptography;
using System.Text;
class Program
{
static void Main()
{
string plainText = "Hello, World!";
string key = "12345678"; // DES 密钥必须是 8 个字节
string encryptedText = EncryptDES(plainText, key);
Console.WriteLine("Encrypted Text: " + encryptedText);
}
static string EncryptDES(string plainText, string key)
{
byte[] keyBytes = Encoding.UTF8.GetBytes(key);
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
using (DESCryptoServiceProvider desProvider = new DESCryptoServiceProvider())
{
desProvider.Key = keyBytes;
desProvider.Mode = CipherMode.ECB; // 使用相同的加密模式
desProvider.Padding = PaddingMode.PKCS7; // 使用相同的填充方式
ICryptoTransform encryptor = desProvider.CreateEncryptor();
byte[] encryptedBytes = encryptor.TransformFinalBlock(plainBytes, 0, plainBytes.Length);
return Convert.ToBase64String(encryptedBytes);
}
}
}
PHP 示例(加密):
<?php
$plainText = "Hello, World!";
$key = "12345678"; // DES 密钥必须是 8 个字节
$encryptedText = encryptDES($plainText, $key);
echo "Encrypted Text: " . $encryptedText;
function encryptDES($plainText, $key)
{
$cipher = "DES-ECB"; // 使用相同的加密模式和算法
$encryptedText = openssl_encrypt($plainText, $cipher, $key, OPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING);
$encryptedText = pkcs5_unpad($encryptedText);
return base64_encode($encryptedText);
}
function pkcs5_unpad($text)
{
$pad = ord($text[strlen($text) - 1]);
if ($pad > strlen($text)) {
return false;
}
if (strspn($text, chr($pad), strlen($text) - $pad) != $pad) {
return false;
}
return substr($text, 0, -1 * $pad);
}
?>
确保 C# 和 PHP 代码中的以下设置相同:
key
)CipherMode.ECB
和 $cipher = "DES-ECB"
)PaddingMode.PKCS7
和 pkcs5_unpad
函数)这样,C# 和 PHP 的 DES 加密解密就能保持一致。对于云服务中的加密需求,可以考虑使用腾讯云的 云加密服务,它提供了多种加密算法和安全密钥管理功能。