在c#中使用ecb的Des和3Des(来自C)

本文关键字:3Des 来自 Des ecb | 更新日期: 2023-09-27 18:15:21

我有这段C代码,我必须用c#来写。

如何在c#中编写这些ecb des和3des函数?

/**
* Simple Single-Des Encryption procedure.
* Does not modify the input data.
* Encrypted result is returned in a separate buffer.
*
* @param pResult    (out) Result of the encrypted byte
* @param pData      (in)  One byte of input data
* @param pKey       (in)  The DES-key
*/
void DesEncrypt(void *pResult, const void *pData, KEY_1DES *pKey)
{
    memcpy(pResult, pData, 8);
    DES_key_schedule k;
    DES_set_key_unchecked((const_DES_cblock *)&pKey, &k);
    DES_ecb_encrypt((const_DES_cblock *)pData, (const_DES_cblock *)pResult, &k, DES_ENCRYPT);
}

/**
* Encrypts a byte using double length 3DES
*
* @param pResult    (out) Result of the decryption
* @param pData      (in)  One byte of input data
* @param pKey       (in)  The 3DES-key
*/
void DesEncrypt3Des(void *pResult, const void *pData, KEY_3DES *pKey)
{
    memcpy(pResult, pData, 8);
    //DES_set_key_checked()
    DES_key_schedule left;
    DES_set_key_unchecked((const_DES_cblock *)&pKey->left, &left);
    DES_key_schedule right;
    DES_set_key_unchecked((const_DES_cblock *)&pKey->right, &right);
    DES_ecb3_encrypt((const_DES_cblock *)pData, (const_DES_cblock *)pResult, &left, &right, &left, DES_ENCRYPT);
}

我问这个问题是因为有很多方法可以做到这一点,我必须确保使用相同的加密参数

在c#中使用ecb的Des和3Des(来自C)

为什么不直接使用System.Security.Cryptography中的TripleDESCryptoServiceProvider呢?

public static string Encrypt(string data, string pKey)
{
    TripleDESCryptoServiceProvider cryptor = new TripleDESCryptoServiceProvider();
    byte[] array = null;
    cryptor.Key = pKey;
    cryptor.Mode = CipherMode.ECB;
    ICryptoTransform encrypt = cryptor.CreateEncryptor();
    array = ASCIIEncoding.ASCII.GetBytes(data);
    string retVal = "";
    retVal = Convert.ToBase64String(encrypt.TransformFinalBlock(array, 0, array.Length));
    return retVal;
}

对于解密使用相同的逻辑,而是调用CreateDecryptor()