C# 使用3DES EDE/ECB/NOP加密

C# 使用3DES EDE/ECB/NOP加密,c#,php,encryption,3des,C#,Php,Encryption,3des,我收到了一个任务,通过使用令牌和密钥对XML字符串进行加密和解密。 加密应使用3DES-EDE/ECB/NOPadding,可以在PHP或c35; 我对此没有太多准备,因此我阅读了一些理论,并得出了一个非常简单的实现方法,如下所示: public string Encrypt( string message, string key, string token ) { byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes( message )

我收到了一个任务,通过使用令牌和密钥对XML字符串进行加密和解密。 加密应使用
3DES-EDE/ECB/NOPadding
,可以在
PHP
c35;

我对此没有太多准备,因此我阅读了一些理论,并得出了一个非常简单的实现方法,如下所示:

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);

谢谢你的回答。我已经通过添加令牌的新哈希来编辑代码,并按照您的建议使用。你是那个意思吗?是的,我是那个意思:)这个“代币”到底是什么?它是用来干什么的?@GregS:代币是一个10个字符长的文本字符串。任务要求使用密钥和令牌,使用
3DES/ECB/NOPadding
加密消息。键是类似“1234567890012345678901234”(24个字符)的字符串