【问题标题】:Encrypt using 3DES EDE / ECB / NOPadding使用 3DES EDE / ECB / NOPadding 加密
【发布时间】:2015-03-11 19:37:30
【问题描述】:

我收到了一项使用 TOKEN 和 KEY 加密和解密 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;
}

但是我认为这并不完全正确。事实上,我不确定是否应该以这种方式使用 TOKEN。 有人可以提供更多信息并为我指出如何解决这个问题的正确方向吗?

谢谢

【问题讨论】:

  • “令牌”到底是什么,它的用途是什么?
  • @GregS:TOKEN 是一个 10 个字符长的文本字符串。该任务说通过使用密钥和令牌来加密带有3DES/ECB/NOPadding 的消息。键是一个字符串,如“123456789012345678901234”(24 个字符)

标签: c# php encryption 3des


【解决方案1】:

您可以在 TripleDESCryptoServiceProvider 上使用令牌作为向量,以及密钥。

ICryptoTransform cTransform = tdes.CreateEncryptor(key, token);

【讨论】:

  • 感谢您的回答。我已经通过添加 TOKEN 的新哈希来编辑我的代码,并按照您的建议使用。你是那个意思吗?
  • 是的,我的意思是这样 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-12-22
  • 1970-01-01
  • 1970-01-01
  • 2017-01-20
  • 1970-01-01
相关资源
最近更新 更多