詳情請看《Dotnet core結合jquery的前後端加密解密密碼密文傳輸的實現》,正常來講,這個博客裡面的代碼是沒有問題的,但是我有時候卻會直接報錯,原因是後臺解密失敗:Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicExc ...
詳情請看《Dotnet core結合jquery的前後端加密解密密碼密文傳輸的實現》,正常來講,這個博客裡面的代碼是沒有問題的,但是我有時候卻會直接報錯,原因是後臺解密失敗:Internal.Cryptography.CryptoThrowHelper.WindowsCryptographicException
我一開始想,是不是因為前端jquery傳過來的秘鑰裡面有了空格,於是加了trim,但有時候還是不行,繼續分析。我發現,解密失敗只會出現在我用VS生成了項目之後(預設頁面是登錄頁面),沒有立即登錄,然後我又重新生成了項目,此時開了調試模式,然後我再之前的頁面進行登錄就會報錯。我後來一想是不是跟秘鑰有關?看了下代碼,一分析還真是:
public class ProcessViewResultAttribute : ActionFilterAttribute { public override void OnResultExecuting(ResultExecutingContext context) { //rsa public key var controller = (context.Controller as Controller); controller.ViewBag.PublicExponent = RSAUtil.PublicPars.PublicExponent; controller.ViewBag.PublicModulus = RSAUtil.PublicPars.PublicModulus; base.OnResultExecuting(context); } }
ActionFilterAttribute裡面所有的過濾器方法都是在前端razor頁面出現之前執行完成的,因此,在OnResultExecuting中給ViewBag傳入公鑰是可行的,前端可以獲取到公鑰進而加密,但是!每次你進入登錄註冊頁面,生成的公鑰都是不一樣的,只有在你某次進入的登錄註冊頁進行登錄註冊,才能解密成功,要不然會因為每次的公鑰不一樣,私鑰也就不一樣,因此就會解密失敗。所以,這點是要註意的。