自己隨便寫的,不算技術貼。

2021-05-28 10:41:00 字數 1477 閱讀 8633

感覺自己的學習到了乙個小瓶頸階段,看來要略微改變一下學習方式了,於是就想到寫博,把學的東西系統地梳理一下,因為只是在頭腦中想的話會很淺薄。

今天上午看了http、tcp/ip協議、加密演算法。前兩個只是掃一眼,以我的水平還看不懂,演算法是我最近在學的東西,以前看過一點加密演算法,這次又看了下,感覺果然是溫故而知新啊。

加密演算法有對稱加密和非對稱加密,前者就是發信人和收信人擁有同乙個金鑰,資訊只是經歷乙個中間態,在前端加密,後端解密。收信人也可以用相同的辦法給發信人發資訊,兩邊是完全對等的——即通過同乙個金鑰即公鑰收發資訊。我這麼說可能很混亂,因為我確實水平不到。這種加密技術的優勢是簡單易行。比如我們把所有字元的ascii碼值加13就完成了資訊的加密,而收信人根據這個規則把相應字元減去13就可以得到源資訊。看,方法很簡單吧。當然,這是有代價的。既然簡單當然就很容易被破解。你需要保證雙方都有共同的金鑰,於是你就必須把這個金鑰發給接收你資訊的人,但問題是,你如何保證,在你傳送金鑰時沒有人截獲金鑰?一旦金鑰被截獲,那麼一切基於此金鑰加密的資訊都將被破解,無論是何時何地傳送的資訊。所以,這是相當不安全的。

於是有人開發出了rsa公鑰加密演算法——非對稱加密演算法。這種演算法其實要用到數論的知識,這我可不會,所以只能了解一下。

rsa演算法理論基礎是,迄今為止沒有一種有效的方法快速分解乙個數。用計算機術語來說,這可能是乙個np問題,即無法在多項式時間內分解乙個很大的數,所以,判斷乙個相當大的數是否是素數是很困難的。這裡說的大數不是幾十億這麼簡單,而是成百上千位,也就是10^100以上。想想看55353560.......13293547這樣乙個有500位的數你如何快速判斷它是否是素數?有些很容易,如果末尾是2或5之類的,而有些很困難,甚至在目前是無法判斷的。rsa於是選取兩個大素數p,q相乘,得到乙個數n,得到公鑰。演算法具體過程我就不寫了,因為我也不會。只需要知道,常規解密方法依賴於解出p和q,而我剛剛又說了,這是很困難的,於是加密就成功了。

我想說說這個演算法的優缺點。優點顯而易見,比對稱加密安全了很多,就不多說了。缺點嘛,這個演算法最大的缺點是沒有人能證明它的安全性。我剛剛說沒有人能證明可以在多項式時間內分解乙個大數,但也沒有人證明不能,所以,在數學上,這是乙個未解的難題。假如有一天有人找到了這種演算法,很明顯,rsa演算法就可以退休了。事實上,分解大數的演算法正在不斷改進,現在已經能夠分解乙個相當大的數了,由於此,安全性要求較高的地方,要採用2048位公鑰加密,這直接導致了加解密過程的繁瑣和時間消耗過大。這個演算法的另外乙個根本缺點是,也沒有人證明解密rsa演算法加密的資訊與分解大數是等價的,也就是說,也許我們可以繞過分解大數這個屏障,直接解密資訊——這都是無法證明的東西。至於非對稱,這種加密是單向的,加密過程只有加密者知道。其他的一些缺點就不說了。

我覺的rsa加密演算法其實利用了自然界的某些奇特性質,我給它起名叫單向性。乙個很簡單的例子是,你可以很快地、直接地算出15^4是多少,但算對數的話你需要轉化為計算冪,一步步試探,直到得出答案,即沒有辦法按照某種規則直接算出對數。對數只是一種表示方法,但我覺的不是一種運算方法。

就寫到這裡吧,以後有什麼想法再寫出來。

隨便寫的蛇形矩陣

問題描述 蛇形矩陣是由1開始的自然數依次排列成的乙個矩陣上三角形。要求 資料輸入 本題有多組資料,每組資料由乙個正整數n組成。n不大於100 資料輸出 對於每一組資料,輸出乙個n行的蛇形矩陣。兩組輸出之間不要額外的空行。矩陣三角中同一行的數字用乙個空格分開。行尾不要多餘的空格。樣例輸入 5 樣例輸出...

Session隨便寫的(抄書筆記)

會話是web開發中常用的一種物件。會話是存在於伺服器端的物件,因此會話超時是保證效能效率的必要手段,本章將學習幾種常用的使會話失效的辦法。大多數容器都使用cookie作為會話跟蹤的基礎,但是cookie機制可能被客戶端禁止。本章將學習如何使用url重寫,保證會話被禁止時會話機制仍然有效。客戶端對伺服...

《隨便寫》 多執行緒的例子

乙個執行緒在使用這個共享的時候,其他執行緒必須等待他結束 通過 鎖 實現,作用就是防止多個執行緒使用這片記憶體空間 程序 程式的一次執行 執行緒 cpu運算的基本排程單位 多執行緒 大量密集i o處理,在等待響應的時候,其他執行緒去工作 多程序 大量的密集平行計算 scrapy 非同步網路框架 很多...