php的3des兼容c#

流年_梦 流年_梦 墨衍会员 · AI 创作全网分发 墨衍智能分发 通过墨衍一键同步至各平台 可同步平台 CSDN微信公众号微博知乎掘金百家号博客园抖音小红书 你的文章也可以这样分发 墨衍会员 ¥399起/年,写一次发全网 我也要 + 加入社区
有份c#的源码如下(我写过不少php和别的代码的加解密对接,不过这份和c#的3des对接一直没搞定,看了下我觉得是c#的这里面用的base64和php的编码不太一样,但是无从下手,请教大神们有能解决的):
public class Des3  
{
#region CBC模式**
/// <summary>
/// DES3 CBC模式加密
/// </summary>
/// <param name="key">密钥</param>
/// <param name="iv">IV</param>
/// <param name="data">明文的byte数组</param>
/// <returns>密文的byte数组</returns>
public static byte[] Des3EncodeCBC( byte[] key, byte[] iv, byte[] data )
{
//复制于MSDN
try
{
// Create a MemoryStream.
MemoryStream mStream = new MemoryStream();
TripleDESCryptoServiceProvider tdsp = new TripleDESCryptoServiceProvider();
tdsp.Mode = CipherMode.CBC; //默认值
tdsp.Padding = PaddingMode.PKCS7; //默认值
// Create a CryptoStream using the MemoryStream
// and the passed key and initialization vector (IV).
CryptoStream cStream = new CryptoStream( mStream,
tdsp.CreateEncryptor( key, iv ),
CryptoStreamMode.Write );
// Write the byte array to the crypto stream and flush it.
cStream.Write( data, 0, data.Length );
cStream.FlushFinalBlock();
// Get an array of bytes from the
// MemoryStream that holds the
// encrypted data.
byte[] ret = mStream.ToArray();
// Close the streams.
cStream.Close();
mStream.Close();
// Return the encrypted buffer.
return ret;
}
catch ( CryptographicException e )
{
Console.WriteLine( "A Cryptographic error occurred: {0}", e.Message );
return null;
}
}
/// <summary>
/// DES3 CBC模式解密
/// </summary>
/// <param name="key">密钥</param>
/// <param name="iv">IV</param>
/// <param name="data">密文的byte数组</param>
/// <returns>明文的byte数组</returns>
public static byte[] Des3DecodeCBC( byte[] key, byte[] iv, byte[] data )
{
try
{
// Create a new MemoryStream using the passed
// array of encrypted data.
MemoryStream msDecrypt = new MemoryStream( data );
TripleDESCryptoServiceProvider tdsp = new TripleDESCryptoServiceProvider();
tdsp.Mode = CipherMode.CBC;
tdsp.Padding = PaddingMode.PKCS7;
// Create a CryptoStream using the MemoryStream
// and the passed key and initialization vector (IV).
CryptoStream csDecrypt = new CryptoStream( msDecrypt,
tdsp.CreateDecryptor( key, iv ),
CryptoStreamMode.Read );
// Create buffer to hold the decrypted data.
byte[] fromEncrypt = new byte[data.Length];
// Read the decrypted data out of the crypto stream
// and place it into the temporary buffer.
csDecrypt.Read( fromEncrypt, 0, fromEncrypt.Length );
//Convert the buffer into a string and return it.
return fromEncrypt;
}
catch ( CryptographicException e )
{
Console.WriteLine( "A Cryptographic error occurred: {0}", e.Message );
return null;
}
}
#endregion
/// <summary>
/// 类测试
/// </summary>
public static void Test()
{
System.Text.Encoding utf8 = System.Text.Encoding.UTF8;
//key为abcdefghijklmnopqrstuvwx的Base64编码
byte[] key = Convert.FromBase64String( "YWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4" );
byte[] iv = new byte[] { 1, 2, 3, 4, 5, 6, 7, 8 }; //当模式为ECB时,IV无用
byte[] data = utf8.GetBytes( "中国ABCabc123" );
System.Console.WriteLine( "ECB模式:" );
byte[] str1 = Des3.Des3EncodeECB( key, iv, data );
byte[] str2 = Des3.Des3DecodeECB( key, iv, str1 );
System.Console.WriteLine( Convert.ToBase64String( str1 ) );
System.Console.WriteLine( System.Text.Encoding.UTF8.GetString( str2 ) );
System.Console.WriteLine();
System.Console.WriteLine( "CBC模式:" );
byte[] str3 = Des3.Des3EncodeCBC( key, iv, data );
byte[] str4 = Des3.Des3DecodeCBC( key, iv, str3 );
System.Console.WriteLine( Convert.ToBase64String( str3 ) );
System.Console.WriteLine( utf8.GetString( str4 ) );
System.Console.WriteLine();
}
}
...全文

相关推荐

PHP 3des 对称加密解密,与 java c#兼容

PHP 3des 对称加密解密,与 java c#兼容

一个乐观的程序猿

实现JavaScript端的3DES加密和解密以及使用OpenSSL的PHP、Java、C#和C++进行兼容的3DES加密解密

在信息安全领域中,3DES(Triple Data Encryption Standard)是一种常用的对称加密算法,它基于DES算法的扩展,提供更高的安全性。本文将介绍如何使用CryptoJS库在JavaScript端实现3DES加密和解密,并使用OpenSSL在PHP、Java、C#和C++中实现兼容的3DES加密解密。接下来,我们将演示如何使用CryptoJS实现JavaScript端的3DES加密和解密。在上述代码中,我们首先定义了一个密钥(key),密钥长度必须为24字节(192位)。

DsJustintime

php DES加密算法实例分析

然而,当我们需要在不同语言间(如PHP、Java和C#)进行加密解密时,需要注意填充模式的一致性。PHP的mcrypt扩展默认使用PKCS5填充,而Java和.NET通常使用PKCS7。

weixin_38676500

java字符串加密解密源码,我还有相同加密方法的delphi、php、C#、QT、golang、java版本

在这个场景下,你提到的项目提供了多种编程语言(Java、Delphi、PHP、C#、QT、Golang)的相同加密方法实现,确保在不同客户端与服务器之间的数据交换过程中的安全。

flyboye

NT系列加密狗产品选型表

- **开发兼容性**:提供了丰富的开发接口,包括LIB静态库、DLL动态库、COM组件方式、Active控件等多种形式,方便开发者集成到各类应用环境中。

janson
评论 2
收藏 已收藏
分享
返回顶部
流年_梦
基础编程 21,889 成员 140,329 内容