程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> 關於C語言 >> 大整數算法[00] 概述,整數算法00概述

大整數算法[00] 概述,整數算法00概述

編輯:關於C語言

大整數算法[00] 概述,整數算法00概述


        ★ 為啥要做這個

        早在大一的時候,我便對密碼學產生興趣。那時在計算機導論後面看到RSA加密的計算原理,覺得十分有趣,於是就很想自己實現一個RSA加密,不過我很快就放棄了,因為實在搞不定那超長的整數計算。C裡面最長的整數類型也就64位,對於動辄就1024位的RSA密鑰,這連個零頭都沒有。為了完成這個目標,我便開始琢磨著弄一個用來計算大整數的庫。原本我也打算使用別人已經寫好的大數庫,不過最終還是決定自己搞一個,因為凡是效率高速度快的大數庫 (OpenSSL, Crypto++, GMP),要麼使用的數據結構很復雜,要麼編碼風格比較奇葩,對於剛學編程的我來說水平和耐心都實在是有限,以至於無法完全讀懂這些東西,有一些我能看明白的代碼,其實現方式又比較幼稚,效率很低速度慢得一塌糊塗,最後想想,自己做一個的話不僅能弄明白大整數計算是如何實現的,而且也順帶提升一下自己的編碼能力,何樂而不為呢?

 

        ★ 用途

        做一個項目,清晰的定位還是十分有必要的,不然容易偏離自己的初衷。對於這個大整數庫,我的定位就是用於密碼學(准確的說是公鑰密碼學),只做整數的計算,不做浮點數計算(那是給科學計算用的,加密完全用不上)

 

         ★ 要求

         雖然大整數算法的計算開銷比其他算法的開銷要大,但是通過精心的優化,大部分開銷還是可以保持在較小的水平。對於我自己做的這個庫,只要能接近OpenSSL的效率,我就滿足了,但是代碼盡量做到簡潔易懂,不要像OpenSSL或者GMP那樣太復雜。編程使用C語言,對於一些關鍵的地方,考慮使用內聯匯編進行優化。

 

         ★ 本系列博文的內容

         本系列博文,主要是介紹大整數算法的實現,分享一些編程心得,順帶講講算法背後的一點點理論。

 

         ★ 參考的資料

         Handbook of Applied Cryptography ( HAC )

         BigNum Math-Implementing Cryptographic Multiple Precision Arithmetic

         OpenSSL

         PolarSSL

         LibTomMath

 

         ★ 結尾

         這個大整數庫在2014年年初便開始動工,花了有大半年的時間來做,目前已經完工了,雖然跟其他的庫比起來可能還有一些不足,但是我花在這上面的心血還是很大的,所以決定寫點博文來分享一些自己的心得。

 

            為了方便閱讀,把本系列博文的目錄整理如下

         01. 大整數的表示和相關定義

         02. 基本的操作(維護算法)

         03. 比較操作

         04. 位設置操作

         05. 移位操作

         06. 絕對值加法

         07. 絕對值減法

         08. 有符號加法和減法

         09. Comba乘法

         10. Karatsuba乘法

         11. 有符號乘法

         12. Comba平方

         13. Karatsuba平方

         14. 有符號平方

         15. 帶余數除法

          未完待續........

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved