簡體   English   中英

使用3DES EDE / ECB / NOPadding進行加密

[英]Encrypt using 3DES EDE / ECB / NOPadding

我已經收到一個使用令牌和密鑰加密和解密XML字符串的任務。 加密應使用3DES EDE / ECB / NOPadding並且可以使用PHPC#進行加密

我對此還沒有做好准備,因此我已經閱讀了一些理論並得出了一個非常簡單的實現方法,如下所示:

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM