C# 與 php 7.1 資料傳輸以DES加解密
IPFS
原本在 php 7.0 及之前可以直接用 mcrypt,但是在 7.1 之後就被拿掉了,除非用 PCEL 去裝,或者使用其他的 library,要不然應該就只能使用 openssl 的加解密。
原本應該是很容易的事情,但是因為 C# 跟 php 兩邊的寫法實在差很大,其中 php 用 openssl 做加解密真的方便很多,麻煩的主要是在 C# 這邊…
php 使用 openssl 完成 DES 加解密
$password = '12345678'; //DES 8 digit password var_dump($password); $method = "des-cbc"; var_dump($method); $plain = "this is a book"; $iv = $password; $cipher = openssl_encrypt($plain, $method, $password, 0, $iv); var_dump($cipher); var_dump(openssl_decrypt($cipher, $method, $password, 0, $iv));
C#實作DES加解密
using System;
using System.Collections.Generic;
using System.IO;
using System.Security.Cryptography;
using System.Text;
namespace MySecure
{
public static class MyEncryption
{
///
/// DES Encryption
///
/// <param name="plain">Plain text for encryption.
/// <param name="encryptKey">keyfor encryption, length = 8
/// <returns>Return encrypted string. If fail, return null.</returns>
public static string EncryptDES(string encryptString, string encryptKey = "12345678")
{
try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] key = Encoding.ASCII.GetBytes(encryptKey);
byte[] iv = Encoding.ASCII.GetBytes(encryptKey);
byte[] dataByteArray = Encoding.UTF8.GetBytes(encryptString);
des.Key = key;
des.IV = iv;
string encrypt = "";
using (MemoryStream ms = new MemoryStream())
using (CryptoStream cs = new CryptoStream(ms, des.CreateEncryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, 0, dataByteArray.Length);
cs.FlushFinalBlock();
encrypt = Convert.ToBase64String(ms.ToArray());
}
return encrypt;
}
catch
{
return null;
}
}
///
/// DES Decryption
///
/// <param name="cipher">Cipher text for decryption.
/// <param name="decryptKey">key for decrypt, length = 8
/// <returns>Return decripted string. If fail, return null.</returns>
public static string DecryptDES(string cipher, string decryptKey = "12345678")
{
try
{
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
byte[] key = Encoding.ASCII.GetBytes(decryptKey);
byte[] iv = Encoding.ASCII.GetBytes(decryptKey);
des.Key = key;
des.IV = iv;
byte[] dataByteArray = Convert.FromBase64String(cipher);
using (MemoryStream ms = new MemoryStream())
{
using (CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(), CryptoStreamMode.Write))
{
cs.Write(dataByteArray, 0, dataByteArray.Length);
cs.FlushFinalBlock();
return Encoding.UTF8.GetString(ms.ToArray());
}
}
}
catch
{
return null;
}
}
}
}
呼叫使用
using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using MySecure;
namespace TestConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
string plain = "this is a book";
Console.WriteLine(plain);
string cipher = MyEncryption.EncryptDES(plain, "12345678");
Console.WriteLine(cipher);
Console.WriteLine(MyEncryption.DecryptDES(cipher, "12345678"));
Console.ReadLine();
}
}
}
Original link: Phanix's Blog
喜欢我的作品吗?别忘了给予支持与赞赏,让我知道在创作的路上有你陪伴,一起延续这份热忱!
