使用 3DES EDE / ECB / NOPadding 加密
Encrypt using 3DES EDE / ECB / NOPadding
我接到了一个任务,要用一个TOKEN和一个KEY加密和解密一个XML字符串。
加密应使用 3DES EDE / ECB / NOPadding
并且可以在 PHP
或 C#
中进行
我对此准备不足,所以我阅读了一些理论并得出了一个非常简单的实现方式,如下所示:
public string Encrypt( string message, string key, string token ) {
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes( message );
byte[] keyArray = CreateHash( key );
byte[] vectorArray = CreateHash( token );
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
//set the secret key for the tripleDES algorithm
tdes.Key = keyArray;
//mode of operation. there are other 4 modes. We choose ECB(Electronic code Book)
tdes.Mode = CipherMode.ECB;
//padding mode(if any extra byte added)
tdes.Padding = PaddingMode.None;
ICryptoTransform cTransform = tdes.CreateEncryptor(keyArray, vectorArray);
//transform the specified region of bytes array to resultArray
byte[] resultArray = cTransform.TransformFinalBlock( toEncryptArray, 0, toEncryptArray.Length );
//Release resources held by TripleDes Encryptor
tdes.Clear();
//Return the encrypted data into unreadable string format
return Convert.ToBase64String( resultArray, 0, resultArray.Length );
}
private byte[] CreateHash( string toHash ) {
//use get hashcode regards to your key
MD5CryptoServiceProvider hashKey = new MD5CryptoServiceProvider();
byte[] kArray = hashKey.ComputeHash( UTF8Encoding.UTF8.GetBytes( toHash ) );
//Always release the resources and flush data
//of the Cryptographic service provide. Best Practice
hashKey.Clear();
return kArray;
}
不过我认为这并不完全正确。事实上,我不确定令牌是否应该以这种方式使用。
有人可以提供更多信息并为我指明解决此问题的正确方向吗?
谢谢
您可以将令牌与密钥一起用作 TripleDESCryptoServiceProvider 上的向量。
ICryptoTransform cTransform = tdes.CreateEncryptor(key, token);
我接到了一个任务,要用一个TOKEN和一个KEY加密和解密一个XML字符串。
加密应使用 3DES EDE / ECB / NOPadding
并且可以在 PHP
或 C#
我对此准备不足,所以我阅读了一些理论并得出了一个非常简单的实现方式,如下所示:
public string Encrypt( string message, string key, string token ) {
byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes( message );
byte[] keyArray = CreateHash( key );
byte[] vectorArray = CreateHash( token );
TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider();
//set the secret key for the tripleDES algorithm
tdes.Key = keyArray;
//mode of operation. there are other 4 modes. We choose ECB(Electronic code Book)
tdes.Mode = CipherMode.ECB;
//padding mode(if any extra byte added)
tdes.Padding = PaddingMode.None;
ICryptoTransform cTransform = tdes.CreateEncryptor(keyArray, vectorArray);
//transform the specified region of bytes array to resultArray
byte[] resultArray = cTransform.TransformFinalBlock( toEncryptArray, 0, toEncryptArray.Length );
//Release resources held by TripleDes Encryptor
tdes.Clear();
//Return the encrypted data into unreadable string format
return Convert.ToBase64String( resultArray, 0, resultArray.Length );
}
private byte[] CreateHash( string toHash ) {
//use get hashcode regards to your key
MD5CryptoServiceProvider hashKey = new MD5CryptoServiceProvider();
byte[] kArray = hashKey.ComputeHash( UTF8Encoding.UTF8.GetBytes( toHash ) );
//Always release the resources and flush data
//of the Cryptographic service provide. Best Practice
hashKey.Clear();
return kArray;
}
不过我认为这并不完全正确。事实上,我不确定令牌是否应该以这种方式使用。 有人可以提供更多信息并为我指明解决此问题的正确方向吗?
谢谢
您可以将令牌与密钥一起用作 TripleDESCryptoServiceProvider 上的向量。
ICryptoTransform cTransform = tdes.CreateEncryptor(key, token);