1

如何DES在 .NET 中使用?

这是我在 Java 中的做法:

        public static String decrypt(byte[] pin, byte [] desKeyData ) throws Exception {
    //if (ISOConstantsLibrary.DEBUG) System.out.println("original: " + pin + " key: " + ISOUtil.bcd2str(desKeyData, 0, 2 * desKeyData.length, false) );
    String out = "";

    try {           
        SecretKeySpec desKey = new SecretKeySpec(desKeyData, "DES");
        Cipher cipher = Cipher.getInstance("DES/ECB/NoPadding");//DES/CBC/PKCS5Padding
        byte[] encrypted_password = pin;
        cipher.init(Cipher.DECRYPT_MODE, desKey);
        byte[] decrypted_password = cipher.doFinal(encrypted_password);
        out = new String(decrypted_password);
        //if (ISOConstantsLibrary.DEBUG) System.out.println("Decrypted Password " + out);
    }
    catch (Exception e) {
        e.printStackTrace();
    }

    return out;
}

DES.NET 中是否有用于解密加密的库?如果是这样,我该如何使用它?

4

3 回答 3

1

您可以使用 DESCryptoServiceProvider。见这篇文章

于 2009-11-18T13:10:35.510 回答
1

假设您的输入是一个流

using System.Security.Cryptography

string key;
Stream input;
string output;
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
//Set key and initialization vector for DES algorithm
DES.Key = ASCIIEncoding.ASCII.GetBytes(key);
DES.IV = ASCIIEncoding.ASCII.GetBytes(key);

//Create CryptoStream layer to decrypt input on reading
CryptoStream decryptStream = new CryptoStream(input, DES.CreateDecryptor(), CryptoStreamMode.Read);
//return decrypted
return new StreamReader(decryptStream ).ReadToEnd();

否则,您当然可以轻松地将输入写入流。对于 ECB 模式,您还需要将 DES 对象的模式设置为 ECB:

DES.Mode = CipherMode.ECB
于 2009-11-18T13:15:49.220 回答
1

作为补充其他答案的旁注。如果可以,请不要使用它,请使用AESCryptoServiceProvider

DES 现在被认为对于许多应用程序是不安全的。这主要是因为 56 位密钥太小了;1999 年 1 月,distributed.net 和电子前沿基金会合作,在 22 小时 15 分钟内公开破解了一个 DES 密钥

于 2009-11-18T13:42:23.987 回答