c# 與 PHP中 SHA1加密結果不同解決方法


那天在調試API的時候,發現用c#寫的SHA1加密出來的結果和PHP中sha1()出來的不一樣,找了半天的原因后來才弄出來

在調試微信接口的時候大多的幫助文檔都是提供的是PHP的方法,所以在.net中實現的時候會出現很多的問題,最典型的就是token通不過驗證

現在提供一個結果與Php一樣 的SHA1方法

        public static string Sha1Sign(string data)
        {
            byte[] temp1 = Encoding.UTF8.GetBytes(data);
            SHA1CryptoServiceProvider sha = new SHA1CryptoServiceProvider();
            byte[] temp2 = sha.ComputeHash(temp1);
            sha.Clear();
            // 注意, 不能用這個
            // string output = Convert.ToBase64String(temp2);// 不能直接轉換成base64string
            var output = BitConverter.ToString(temp2);
            output = output.Replace("-", "");
            output = output.ToLower();
            return output;
        }

 

解決方式:在php中sha1出來的是小寫字母,可是在c#中默認出來的是大寫,在token驗證的時候也是區分大小寫的,另外很多人在

            // string output = Convert.ToBase64String(temp2);// 不能直接轉換成base64string
            var output = BitConverter.ToString(temp2);

  這里犯了錯誤卻一直沒有發現,所以找了很久的原因 

 

PS:

在送上一個Php的

base64_encode的c#實現

        public static string Base64_encode(string data)
        {
            return Convert.ToBase64String(Encoding.UTF8.GetBytes(data));
        }

  

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM