我正在尝试像这里一样反思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()
会有所帮助(因为它有不同的方法)。
答案 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 };
创建解密器。