[英]Encrypt using 3DES EDE / ECB / NOPadding
我已經收到一個使用令牌和密鑰加密和解密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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.