PHP和.NET 程序在数据交换时候加解密 3DES是最好选择
2013-08-24 14:45
537 查看
PHP和.NET 程序在数据交换时候加解密 3DES是最好选择,而且他们两个md5加密也基本一致,只是PHP加密完成后都是小写字母。PHP和.NET下通用的加密解密类,如下:PHP加解密函数:
function encrypt($string) {
//加密用的密钥文件
$key = "xxxxxxxx";
//加密方法
$cipher_alg = MCRYPT_TRIPLEDES;
//初始化向量来增加安全性
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);
//开始加密
$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return base64_encode($encrypted_string);//转化成16进制
// return $encrypted_string
}
function decrypt($string) {
$string = base64_decode($string);
//加密用的密钥文件
$key = "xxxxxxxx";
//加密方法
$cipher_alg = MCRYPT_TRIPLEDES;
//初始化向量来增加安全性
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);
//开始加密
$decrypted_string = mcrypt_decrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return trim($decrypted_string);
}
C#加解密类:
using System;
using System.Security.Cryptography;
using System.Text;
/**////
/// Crypto3DES 的摘要说明。
///
public class Crypto3DES
{
public Crypto3DES()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private System.Text.Encoding encoding;
/**////
/// 获取密匙
///
public string Key
{
get
{
return "xxxxxxxx";
}
}
/**////
/// 获取或设置加密解密的编码
///
public System.Text.Encoding Encoding
{
get
{
if( encoding == null )
{
encoding = System.Text.Encoding.UTF8;
}
return encoding;
}
set
{
encoding = value;
}
}
/**////
/// 加密
public string Encrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = Encoding.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;
ICryptoTransform DESEncrypt = DES.CreateEncryptor();
byte[] Buffer = encoding.GetBytes(strString);
return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}
/**////
/// 解密
public string Decrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider ();
DES.Key = Encoding.UTF8.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;
ICryptoTransform DESDecrypt = DES.CreateDecryptor();
byte[] Buffer = Convert.FromBase64String(strString);
return UTF8Encoding.UTF8.GetString( DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length) );
}
}
function encrypt($string) {
//加密用的密钥文件
$key = "xxxxxxxx";
//加密方法
$cipher_alg = MCRYPT_TRIPLEDES;
//初始化向量来增加安全性
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);
//开始加密
$encrypted_string = mcrypt_encrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return base64_encode($encrypted_string);//转化成16进制
// return $encrypted_string
}
function decrypt($string) {
$string = base64_decode($string);
//加密用的密钥文件
$key = "xxxxxxxx";
//加密方法
$cipher_alg = MCRYPT_TRIPLEDES;
//初始化向量来增加安全性
$iv = mcrypt_create_iv(mcrypt_get_iv_size($cipher_alg,MCRYPT_MODE_ECB), MCRYPT_RAND);
//开始加密
$decrypted_string = mcrypt_decrypt($cipher_alg, $key, $string, MCRYPT_MODE_ECB, $iv);
return trim($decrypted_string);
}
C#加解密类:
using System;
using System.Security.Cryptography;
using System.Text;
/**////
/// Crypto3DES 的摘要说明。
///
public class Crypto3DES
{
public Crypto3DES()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
private System.Text.Encoding encoding;
/**////
/// 获取密匙
///
public string Key
{
get
{
return "xxxxxxxx";
}
}
/**////
/// 获取或设置加密解密的编码
///
public System.Text.Encoding Encoding
{
get
{
if( encoding == null )
{
encoding = System.Text.Encoding.UTF8;
}
return encoding;
}
set
{
encoding = value;
}
}
/**////
/// 加密
public string Encrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = Encoding.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;
ICryptoTransform DESEncrypt = DES.CreateEncryptor();
byte[] Buffer = encoding.GetBytes(strString);
return Convert.ToBase64String(DESEncrypt.TransformFinalBlock(Buffer, 0, Buffer.Length));
}
/**////
/// 解密
public string Decrypt3DES( string strString )
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider ();
DES.Key = Encoding.UTF8.GetBytes( this.Key );
DES.Mode = CipherMode.ECB;
DES.Padding = PaddingMode.Zeros;
ICryptoTransform DESDecrypt = DES.CreateDecryptor();
byte[] Buffer = Convert.FromBase64String(strString);
return UTF8Encoding.UTF8.GetString( DESDecrypt.TransformFinalBlock(Buffer, 0, Buffer.Length) );
}
}
相关文章推荐
- 算法兴趣----- 一亿数据获取前100个最大值(仅供参考,基于快速排序的实现时间不稳定,基于最小堆实现。如果我们只要求前K个最大(小)值的时候,用堆是最好的选择,因为这里不用每次都排序了)
- .NET 微信小程序用户数据的签名验证和解密
- 在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能
- 选择排序法 当数据量较小的时候,使用基本排序方案并不会显著影响程序性能。 选择排序是十分常用的基本排序方案之一。
- php7.1以上版本 mcrypt拓展无法使用导致小程序登录数据无法解密
- 微信小程序解密encryptedData数据字符串,php中隐形字符65279(utf-8的BOM头)问题
- php7.0以上版本 mcrypt拓展无法使用导致小程序登录数据无法解密
- 在DevExpress程序中使用GridView直接录入数据的时候,增加列表选择的功能
- 在Unity3D里使用JSON格式通过PHP进行数据交换
- 让你的php命令行程序处理管道数据
- (WebSite----Asp.Net Configuration----->无法连接到SQL Server数据库------>选择数据存储区---->应用程序当前被配置为使用提供程序:AspNetSqlProvider)解决方案
- 【白话经典算法系列之四】 直接选择排序及交换二个数据的正确实现
- 用Json实现PHP与JavaScript间数据交换
- 在.NET使用JSON作为数据交换格式
- 向mysql的innodb表快速插入数据的php程序
- 【程序48】 题目:某个公司采用公用电话传递数据,数据是四位的整数, 在传递过程中是加密的,加密规则如下:每位数字都加上5, 然后用和除以10的余数代替该数字,再将第一位和第四位交换, 第二位
- 数据採集器服务——Socket(今天才发现AES加解密代码跟贴的时候不一样,貌似乱码,不知什么情况)
- 在一个程序中调用另一个程序并且传输数据到选择屏幕执行这个程序
- 用DataGrid显示数据库数据---我的第一个.net程序
- Android平台和java平台 DES、3DES、RSA加密解密互通程序及其不能互通的原因