① autojs如何查看簽名密碼
跳過/*** 獲取應用的簽名密碼
*/function getCertificateSHA1Fingerprint() { //獲取包管理器 let pm = context.getPackageManager()//獲取當前要獲取 SHA包名,也可以用其他的包名,但需要注意, //在用其他包名的前提是,此方法傳遞的參數 Context 應該是對應包tpackageName=context.getPackageName(); //返回包括在包中的簽名信息let flags = PackageManager.GET_SIGNATURES; //獲得包的所有內容信類 let packageInfo = .getPackageInfo(packageName, flags); //簽名信息 let signatures = packageInfo.signatures;et cert = signatures[0].toByteArray()//將名轉換為位元組數組流et inpunewteArrayInputStream(cert); //證書工廠類,這個類實現了出廠合格證演算法的功letcf=CertificateFactory.getInstance("X509"); //X509 證書,X.509 是一種非常通用的證書格式let c = cf.generateCertificate(input);//加密演算法的類,這里的參數可以使 MD4,MD5 等加密演算法let md = MessageDigest.getInstance("SHA1");//獲得公鑰let publicKey = md.digest(c.getEncoded()); //位元組到十六進制的格式轉換 let hexString = byte2HexFormatted(publicKey); return hexString;//這里是將獲取到編碼進行16 進制轉換function byte2HexFormatted(arr) { let str = new StringBuilder(arr.length * 2); for (let i = 0; i < arr.length; i++) { let h = Integer.toHexString(arr[i]); et l = h.length if (l == 1) h = "0" + h; if (l > 2) h = h.substring(l - 2, l); str.append(h.toUpperCase()) if (i < arr.length - 1)str.append(":"); } return str.toString();}
② 函數HMAC-SHA1
HMAC
根據RFC 2316(Report of the IAB,April 1998),HMAC(散列消息身份驗證碼: Hashed Message Authentication Code)以及IPSec被認為是Interact安全的關鍵性核心協議。它不是散列函數,而是採用了將MD5或SHA1散列函數與共享機密密鑰(與公鑰/私鑰對不同)一起使用的消息身份驗證機制。基本來說,消息與密鑰組合並運行散列函數。然後運行結果與密鑰組合並再次運行散列函數。這個128位的結果被截斷成96位,成為MAC.
hmac主要應用在身份驗證中,它的使用方法是這樣的:
1. 客戶端發出登錄請求(假設是瀏覽器的GET請求)
2. 伺服器返回一個隨機值,並在會話中記錄這個隨機值
3. 客戶端將該隨機值作為密鑰,用戶密碼進行hmac運算,然後提交給伺服器
4. 伺服器讀取用戶資料庫中的用戶密碼和步驟2中發送的隨機值做與客戶端一樣的hmac運算,然後與用戶發送的結果比較,如果結果一致則驗證用戶合法
在這個過程中,可能遭到安全攻擊的是伺服器發送的隨機值和用戶發送的hmac結果,而對於截獲了這兩個值的黑客而言這兩個值是沒有意義的,絕無獲取用戶密碼的可能性,隨機值的引入使hmac只在當前會話中有效,大大增強了安全性和實用性。大多數的語言都實現了hmac演算法,比如php的mhash、python的hmac.py、java的MessageDigest類,在web驗證中使用hmac也是可行的,用js進行md5運算的速度也是比較快的。
SHA
安全散列演算法SHA(Secure Hash Algorithm)是美國國家標准和技術局發布的國家標准FIPS PUB 180-1,一般稱為SHA-1。其對長度不超過264二進制位的消息產生160位的消息摘要輸出,按512比特塊處理其輸入。
SHA是一種數據加密演算法,該演算法經過加密專家多年來的發展和改進已日益完善,現在已成為公認的最安全的散列演算法之一,並被廣泛使用。該演算法的思想是接收一段明文,然後以一種不可逆的方式將它轉換成一段(通常更小)密文,也可以簡單的理解為取一串輸入碼(稱為預映射或信息),並把它們轉化為長度較短、位數固定的輸出序列即散列值(也稱為信息摘要或信息認證代碼)的過程。散列函數值可以說時對明文的一種「指紋」或是「摘要」所以對散列值的數字簽名就可以視為對此明文的數字簽名。
HMAC_SHA1
HMAC_SHA1(Hashed Message Authentication Code, Secure Hash Algorithm)是一種安全的基於加密hash函數和共享密鑰的消息認證協議。它可以有效地防止數據在傳輸過程中被截獲和篡改,維護了數據的完整性、可靠性和安全性。HMAC_SHA1消息認證機制的成功在於一個加密的hash函數、一個加密的隨機密鑰和一個安全的密鑰交換機制。
HMAC_SHA1 其實還是一種散列演算法,只不過是用密鑰來求取摘要值的散列演算法。
HMAC_SHA1演算法在身份驗證和數據完整性方面可以得到很好的應用,在目前網路安全也得到較好的實現。
③ javascript sha1的解密語句是什麼已經有sha1的js庫了,而且加密語句知道了,就差解密語句!!!
題主確定知道什麼是 SHA-1 嗎?
這不是加密演算法,而是摘要(哈希)演算法,國內經常把二者搞混。
區別就在於,加密演算法可逆,即通過一定的計算,明文、密文可以互推;摘要演算法不可逆,即原文計算後可以得到摘要,但根據摘要不可計算得原文(彩虹表並非「計算」所得)。
④ 如何在React中調用微信的jsSDK
1. 微信JSSDK使用步驟簡介
我們既然是在做基於微信的開發,當然就離不開微信的開發文檔了。開始之前希望大家能先去看下《微信JS-SDK說明文檔》。那麼我們怎麼樣才能用上微信的JSSDK呢?以下基本步驟就是基於該文檔的。
需要注意的是,如果本人下面的描述你看的有點雲里霧里的話,我建議你:
回頭看下本系列《小白學react》的歷史基礎文章,特別是《小白學react之altjs的Action和Store》以及《小白學react之打通React Component任督二脈》,或/和:
直接跳過我的描述,在文章後面下載最新的源碼,先閱讀源碼,碰到問題再反過來看文章的描述。
步驟一:綁定域名
先登錄微信公眾平台進入「公眾號設置」的「功能設置」里填寫「JS介面安全域名」。
備註:登錄後可在「開發者中心」查看對應的介面許可權。
這里綁定的時候需要注意不要帶前面的http協議頭。寫法跟上一篇《小白學react之網頁獲取微信用戶信息》中的網頁回調域名設置的寫法是一樣的。
步驟二:引入JS文件
在需要調用JS介面的頁面引入如下JS文件,(支持https):
請注意,如果你的頁面啟用了https,務必引入 :
,否則將無法在iOS9.0以上系統中成功使用JSSDK
因為我們的index.html是通過ejs模版生成的,所以我們只需要在我們的index.ejs中的body部分末尾加入相應的微信jssdk庫的引用就好了。
步驟三:通過config介面注入許可權驗證配置
所有需要使用JS-SDK的頁面必須先注入配置信息,否則將無法調用(同一個url僅需調用一次,對於變化url的SPA的web app可在每次url變化時進行調用,目前Android微信客戶端不支持pushState的H5新特性,所以使用pushState來實現web app的頁面會導致簽名失敗,此問題會在Android6.2中修復)。
這一步的關鍵是如何生成正確的簽名。這里微信jssdk文檔中有給出不同語言版本的簽名演算法示例大家可以參考。往下我們也會就github上的一個簽名演算法的封裝進行學習。
在我們的實戰過程中,簽名會在伺服器端發生。
react客戶端會像之前的獲取微信用戶信息一樣,通過一個restfulApi調用伺服器端的api,然後由伺服器來生成對應的簽名,然後將簽名信息返回給客戶端。
客戶端獲取到上面wx.config示例代碼中的簽名相關信息後,就會調用一個Alt的Action,來觸發將獲取回來的信息保存到一個跟該Action綁定的jssdk狀態管理的Store裡面。然後就可以調用wx.config來配置我們需要用到的JS介面列表了。
注意這里的wx這個對象是通過上一步的JS文件引入進來的。我們在react的客戶端代碼中可以直接通過window.wx對其進行引用:
步驟四:通過ready介面處理成功驗證
隨後,react客戶端負責jssdk狀態管理的store會調用wx.ready來監聽config配置是否成功,如果成功的話,就會將該store的一個ready狀態設置成true。
這樣的話,通過AltContainer綁定了該store的相應的Component組件就能知道響應的jssdk的api是否已經准備就緒,可以進行調用了。
步驟五:通過error介面處理失敗驗證
同理,如果如果配置失敗的話,那麼就在wx.error這個監聽介面中將ready狀態設置成false。
2. 生成簽名
如前面所述,我們需要用到jssdk的頁面必須要要注入調用到的api的配置信息。
而注入JS介面到頁面時,我們可以看到,還需要使用到其他一些信息。其中appId我們可以從公眾號管理後台獲得。signature是跟所訪問頁面的url關聯的一個簽名,它有專門的一套演算法來生成。另外兩個參數nonceStr和signature都是在簽名的過程中生成的。
這里通過wx.config傳進去這些參數,主要是為了讓微信去判斷我們生成的簽名和微信通過這些信息生成的簽名是否一致,如果不一致的話,那麼注入到該頁面的jsApiListj就失敗。
那麼我們在伺服器這邊的簽名演算法是如何的呢?根據微信開發文檔我們需要提供以下4個參數,然後通過sha1算發來生成對應的簽名:
noncestr:一個隨機字元串,我們隨便填寫
jsapi_ticket:jsapi_ticket是公眾號用於調用微信JS介面的臨時票據
timestamp: 簽名時間戳。注意這個時間戳需要和上面傳入wx.config的時間戳一致
url: 調用JS介面頁面的完整URL。我們可以從react客戶端通過location.href獲得,並傳給伺服器端
那麼這里主要需要解決的就是如何獲得jsapi_ticket這個臨時票據了。
根據文檔的描述,我們可以通過以下這個介面獲得:
cgi-bin/ticket/getticket?access_token=ACCESS_TOKEN&type=jsapi
從中可以看到,我們調用這個介面首先要獲得一個access_token。這里微信也有相應的api來處理。
cgi-bin/token?grant_type=client_credential&appid=APPID&secret=APPSECRET
這里需要用到我們的微信公眾號的appId和secret,這些我們都是已知的,所以好辦。
那麼,也就是說,我們其實只需要提供我們的微信公眾號的appId和secret,就能獲取到access_token,從而就會獲得我們需要的jsapi_ticket。
這里我們參考下github上一個示例(wechat-sdk-demo )的簽名的實現。其傳入的參數有兩個,其中:
url: react客戶端傳進來的需要注入jsapi的頁面url
callback: 一個回調函數,接受一個json格式的參數。主要是用來將生成的簽名信息等回傳給上層調用函數。
這里的流程和我們剛才描述的並無二致。首先是通過appId和secret獲得調用獲取jsapi_ticket的access_token,然後通過該access_token獲得我們簽名需要用到的jsapi_ticket。noncestr我們是提前隨便填寫好的。timestamp的演算法也比較簡單。
最後就是通過sha1這個庫提供的方法,將jsapi_ticket,noncestr,timestamp和頁面url進行sha1簽名,然後將以上這些信息通過callback返回給上層調用函數。
那麼我們往下看下我們的上層調用函數。其實就是我們的express路由:
根據微信開發文檔需求,我們首先需要將傳進來的url的錨點後面的數據給去掉,保留前面的有效部分。
然後就是調用上面的sign方法來生成簽名。上面的簽名方法最後傳進來的json數據就是這里的signatureMap。我們最終會將這些數據發送回react客戶端。
同時,通過上面的wx.config的示例,我們知道還需要用到微信公眾號的appId。所以這里一並將其放到signatureMap中進行返回。
那麼到此為止,react客戶端調用服務端的"/api/signature"返回的數據示例如下:
3. 客戶端獲取簽名信息
3.1 獲取簽名信息並注入jssdk
和之前的獲取微信用戶信息一樣,我們這里會建立一個新的Source文件WechatSdkSource.js來調用遠程伺服器的"/api/signature"介面:
這里傳進來的url由下面將要談及的上層函數所生成。整個流程就沒有什麼好說的了,說白了就是通過相應的庫發送一個帶有url的query參數的請求到伺服器端來請求簽名信息,相信有跟著這個系列文章的朋友都是很清楚的了。
最終請求成功返回的時候就會調用WechatSdkActions的updateSignatureMap這個Action。
而這個action就會觸發所監聽的WechatSdkStore的onUpdateSignatureMap這個回調。