整合營銷服務商

          電腦端+手機端+微信端=數據同步管理

          免費咨詢熱線:

          互聯網面試-https如何加密的

          互聯網面試-https如何加密的

          ttps如何加密的

          HTTPS介紹:
          HTTPS(Secure Hypertext Transfer Protocol)安全超文本傳輸協議 它是一個安全通信通道,它基于HTTP開發,用于在客戶計算機和服務器之間交換信息。它使用安全套接字層(SSL)進行信息交換,簡單來說它是HTTP的安全版。 它是由Netscape開發并內置于其瀏覽器中,使用SSL在發送方把原始數據進行加密,然后在接受方進行解密保證數據的安全性.然而,加密和解密過程需要耗費系統大量的開銷,嚴重降低機器的性能.
          HTTPS實際上就是SSL over HTTP,它使用默認端口443,而不是像HTTP那樣使用端口80來和TCP/IP進行通信。HTTPS協議使用SSL在發送方把原始數據進行加密,然 后在接受方進行解密,加密和解密需要發送方和接受方通過交換共知的密鑰來實現,因此,所傳送的數據不容易被網絡黑客截獲和解密.然而,加密和解密過程需要耗費系統大量的開銷,嚴重降低機器的性能,相關測試數據表明使用HTTPS協議傳輸數據的工作效率只有使用HTTP協議傳輸的十分之一。

          如何實現加密:(其實就是sssl的交互過程)
          HTTPS其實是有兩部分組成:HTTP + SSL / TLS,也就是在HTTP上又加了一層處理加密信息的模塊。服務端和客戶端的信息傳輸都會通過TLS進行加密,所以傳輸的數據都是加密后的數據。具體是如何進行加密,解密,驗證的

          參考:

          http://blog.csdn.net/binyao02123202/article/details/8049446
          http://www.codeceo.com/article/why-http-better-than-https.html

          http和https的區別

          1. https協議需要到ca申請證書,一般免費證書很少,需要交費.
          2. http是超文本傳輸協議,信息是明文傳輸,https 則是具有安全性的ssl加密傳輸協議 http和https使用的是完全不同的連接方式用的端口也不一樣:前者是80,后者是443。
          3. http的連接很簡單,是無狀態的 HTTPS協議是由SSL+HTTP協議構建的可進行加密傳輸、身份認證的網絡協議 要比http協議安全 HTTPS解決的問題.

          標站點:

          aHR0cHMlM0EvL2subS5hdXRvaG9tZS5jb20uY24vZGV0YWlsL3NoYXJlXzAxZG1xeThmYTE2OHZrYWU5aDYwdmcwMDAwLmh0bWw=

          該地址經過base64加密,可以通過如下地址進行解密:

          https://base64.supfree.net
          

          準備工具:

          chome瀏覽器,python3.7語言環境,pycharm,百度字體編輯器:http://fontstore.baidu.com/static/editor/index.html
          

          破解方法:

          1、打開chrome瀏覽器,在瀏覽器地址欄中輸入目標地址,打開網頁后,在頁面中點擊鼠標右鍵,選擇檢查,可以看到相關文字已被加密。

          文字被加密

          2、可以通過復制,來驗證文字是否被加密。如復制:

          老朋友的推薦

          復制出的文字為:

          老朋友?推薦

          3、此類現象為文字被CSS樣式加密,破解步驟如下:

          1、通過瀏覽器開發者模式,找到頁面中文字所使用的css樣式
          2、通過抓包等方法找到加載的css文件,通過正則表達式取出字體文件URL
          3、通過百度字體編輯器解析woff文件:http://fontstore.baidu.com/static/editor/index.html
          4、使用fontTools處理字體文件,得出對應關系
          5、通過對應關系解析加密字體
          

          4、首先使用python的request模塊請求該頁面,通過正則表達式獲取字體文件URL,請求該URL,獲取到字體文件,寫入到本地。

          5、通過百度字體編輯器,解析ttf文件

          6、通過百度字體編輯器,可以看到,"的"對應的字體編碼為"$EC2A",接下來通過python下的fontTools模塊讀取該TTF文件,并建立文字對應關系,保存為字典。

          7、通過for循環遍歷該文字對應關系字典,對原網頁返回進行替換,即可得到正常數據。

          老朋友的推薦,去看了一幾個牌子,頭都看暈了,沒有結果,決定不了買哪個牌子,九了女兒意見,準備在榮威里面選盤款。性價上最高的就是I5了,看中這款的原因,并不是因為配置高,也不是養力強,而是囊中羞澀,預算控有那么電啊?,而榮威這個品牌過硬,質量可靠,故障率低,朋友買了都說挺一的。暫時沒有,還是覺外有點說不過去啊!買車看車子做這個決定,是和女兒共同商量決定的,我看中的是這個牌子的知名度,品質這些方面,女兒的話是喜歡這款車型的十觀,女孩子嘛,都是十貌協會,兩廂車上較炫酷,十形時尚養感,適合年輕妹子。女兒盤看就中意了。

          代碼參考:

          https://github.com/freedom-wy/js-reverse/tree/master/autohome/koubei
          

          歡迎交流,一起學習,一起進步。

          另外,我在慕課網上主講課程:

          《Python爬蟲工程師必學——App數據抓取實戰》,還請各位大神多多支持。課程地址:

          理, 參考python Selenium.

          Rust 對應的支持庫: thirtyfour.

          thirtyfour 是一個用于在 Rust 中使用 WebDriver / Selenium 生態系統自動化 Web 瀏覽器的 crate。它還為 Chrome DevTools 協議提供了一些支持,Cypress 和 Playwright 等流行框架都使用了該協議。

          它旨在成為一個 "batteries-included "的框架,用于所有與 Web 瀏覽器自動化相關的事物,尤其是 Web 應用程序的自動化測試

          劃重點, 2個部分.

          1. 操作web頁面登錄處理.
          2. 帶密碼控件的輸入問題處理.

          本次實驗采用chrome瀏覽器,windows 系統下.
          請先下載chrome瀏覽器的webdriver. 注意版本一定要跟當前chrome瀏覽器版本一致.

          https://chromedriver.chromium.org/downloads

          Step 1:

          手動啟動 chromedriver.exe 或者自動啟動,代碼如下:
          將chromedriver.exe復制到當前項目目錄.

          let dir=current_dir().unwrap();
          let exe=dir.join("chromedriver.exe");
          Command::new(exe)
              .spawn()
              .expect("啟動[chromedriver.exe]失敗!");

          Step2:

          連接webseriver. webservier將監聽在本機9515端口.

          let username="test0000";
          let password="test0001";
          // caps 支持啟動參數. 具體請參考api.
          let mut caps=DesiredCapabilities::chrome();
          
          // 連接到web driver.
          let driver=WebDriver::new("http://127.0.0.1:9515", caps).await?;
          /// 載入登錄頁面.
          driver.goto("https://login.xxxx.xxxx.com/cse/#/login").await?;
          /// 找到輸入手機號的地方. xpath, input輸入框,提示符為請輸入手機號.
          let elem_phone=driver.find(By::XPath("//input[@placeholder='請輸入手機號']")).await?;
          /// 輸入賬號.
          elem_phone.send_keys(username).await?;
          ///找到密碼輸入框. id是login-pwd. 通過F12 查找元素去找規則.
          let elem_password=driver.find(By::Id("login-pwd")).await?
           /// 輸入密碼.
          elem_password.send_keys(password).await?;
          /// 找到登錄按鈕.
          let login_btn=driver.find(By::ClassName("ui-login-from__btn")).await?;
          // 點擊登錄按鈕.
          login_btn.click().await?;
          
           

          通過查找html元素找到元素的匹配規則,再做操作.

          API 參考文檔:

          https://stevepryde.github.io/thirtyfour/introduction.html

          可能遇到的問題:

          1. 元素不可點擊, 元素處于不顯示狀態,點擊無用.檢查是否找對了元素. 或者元素處于被隱藏狀態. display="none"
          2. 操作太快,元素還沒呈現出來就去查找,這個時候有2個解決方案.1

          固定時間等待.

          //等待3秒.
          sleep(Duration::from_secs(3)).await;
          

          查詢只到某個元素出現,看以下代碼,這個地方會阻塞.

          // 等待,只到元素出現或者超時為止. 
          let login_btn=driver.find(By::ClassName("ui-login-from__btn")).first().await?;
           
          1. send_keys 輸入不起作用.看下面.

          帶密碼控件的輸入怎么辦?

          一些對安全性要求比較高的網站比如網銀會對密碼輸入采用專用控件. 甚至對輸入的鍵碼進行了加密,

          這種情況下send_keys是不會起作用的,可行的解決方案是采用驅動級的虛擬鍵盤,模擬鍵盤操作.來實現功能.

          本文采用DD虛擬鍵盤來實現.

          通過rust ffi接口,調用DD虛擬鍵盤的DLL.

          DD虛擬鍵盤項目地址:

          https://github.com/ddxoft/master

          封裝示例代碼如下.

          /// DD 虛擬鍵盤.
          fn load_dd_virtual_kb()->Result<Library, Box<dyn std::error::Error>>  {
              
              unsafe {
                  let lib=libloading::Library::new("dd40605x64.dll")?;
                  return Ok(lib) ;
              }
          
          }
          
          fn dd_btn(lib:&Library, btn: i32) -> Result<(), Box<dyn std::error::Error>>{
              unsafe {
                  let func: libloading::Symbol<unsafe extern fn(i32)>=lib.get(b"DD_btn")?;
                  func(btn);
                  Ok(())
              }
          }
          // 注意,rust 字符串與c str的內存布局和結束符是不同的.
          fn dd_press_key(lib:&Library, key:&str) -> Result<(), Box<dyn std::error::Error>> {
              unsafe {
                  let v=CString::new(key).unwrap();
                  let func: libloading::Symbol<unsafe extern fn(*const c_char)>=lib.get(b"DD_str")?;
                  // info!("Press Key:{}", key);
                  let c_pr: *const c_char=v.as_ptr(); 
                  func(c_pr);
                  Ok(())
              }
          }
          // 慢慢按 1秒1個
          async fn dd_press_key_slow(lib:&Library, keys:&str) -> Result<(), Box<dyn std::error::Error>> {
              
              for c in keys.chars() {
                  let r=dd_press_key(&lib, format!("{}", c).as_str())?;
                  sleep(Duration::from_millis(1000)).await;
              }
          
              Ok(())
          }


          則上面輸入密碼框的做法是.


          主站蜘蛛池模板: 日韩高清国产一区在线| 国产免费一区二区三区VR| 国产美女av在线一区| 乱子伦一区二区三区| 国产日韩综合一区二区性色AV| 国产精品亚洲一区二区三区在线| 国产情侣一区二区| 无码人妻少妇色欲AV一区二区| 国产精品免费综合一区视频| 国产无线乱码一区二三区| 国产精品亚洲综合一区在线观看| 一区二区在线观看视频| 久久综合一区二区无码| 国产色欲AV一区二区三区| 亚洲美女视频一区| 综合人妻久久一区二区精品 | 亚洲国产精品一区二区成人片国内| 国产福利酱国产一区二区| 日本高清不卡一区| 国产伦一区二区三区高清 | 国产精品免费一区二区三区四区| 日本精品啪啪一区二区三区| 亚拍精品一区二区三区| 丰满少妇内射一区| 亚洲国产综合精品一区在线播放| 蜜芽亚洲av无码一区二区三区| 文中字幕一区二区三区视频播放| 精品国产一区二区三区久久蜜臀 | 免费精品一区二区三区第35| 午夜视频久久久久一区| 日本韩国一区二区三区| 无码日韩人妻av一区免费| 亚洲一区二区三区免费视频| 国产a∨精品一区二区三区不卡| 精品国产一区二区三区2021| 乱色熟女综合一区二区三区| 国产在线精品一区二区| 国产一区二区三区在线| 日本精品高清一区二区2021| 国模精品一区二区三区视频| 亚洲av无码片vr一区二区三区 |