ICryptoTransform _NewDecryptor不存在,但_NewEncryptor存在

时间:2018-07-31 10:01:35

标签: c# .net cryptography

我正在尝试像这里一样反思TripleDES(同样的问题):https://social.msdn.microsoft.com/Forums/vstudio/en-US/8fdfcce7-3a8a-4271-8557-3df715c80df8/weak-key-cryptographic-exception?forum=netfxbcl

TripleDES tripleDESalg = TripleDES.Create();
byte[] EmptyKey = new byte[0x18];
byte[] EmptyIV = new byte[8];
TripleDESCryptoServiceProvider sm = tripleDESalg as TripleDESCryptoServiceProvider;
MethodInfo mi =  sm.GetType().GetMethod("_NewEncryptor",BindingFlags.NonPublic | BindingFlags.Instance);
object[] Par = { EmptyKey, sm.Mode, IV, sm.FeedbackSize, 0 };
ICryptoTransform trans = mi.Invoke(sm, Par) as ICryptoTransform;

我可以在加密时成功绕过弱密钥异常,但是当我想要解密器时,就没有_NewDecryptor这样的东西,只有_NewEncryptor(我使用.GetMethods()进行了检查) 。那么,是否有可能为解密器实现相同的目的?也许使用TripleDESCng()会有所帮助(因为它有不同的方法)。

1 个答案:

答案 0 :(得分:1)

看着reference source,没有_NewDecryptor,而是_NewEncryptor的最后一个参数确定了操作模式:

private ICryptoTransform _NewEncryptor (
    byte[] rgbKey, CipherMode mode, byte[] rgbIV, 
    int feedbackSize, CryptoAPITransformMode encryptMode)

0传递encryptMode表示加密,1表示解密,因此您需要:

object[] Par = { EmptyKey, sm.Mode, IV, sm.FeedbackSize, 1 };

创建解密器。