1. 程式人生 > >CAD數字簽名的實現

CAD數字簽名的實現

  1. 用SHA-256演算法對資訊進行hash處理,得到hash值
    SHA的特性:不可以從訊息摘要中復原資訊;兩個不同的訊息不會產生同樣的訊息摘要。
  2. 採用RSA演算法對hash值進行加密解密(非對稱加密演算法)
    非對稱演算法分為公鑰和私鑰,公鑰是公開的,私鑰是保密的。我們這裡採用私鑰進行加密,公鑰進行解密(這樣即使攻擊者有公鑰也無法)
    這裡寫圖片描述
  3. 使用OpenSSL實現RSA演算法,OpenSSL是一個開源的第三方庫。
    使用objectARX進行開發,ObjectARX是AutoDesk公司針對AutoCAD平臺上的二次開發而推出的一個開發軟體包,它提供了以C++為基礎的面向物件的開發環境及應用程式介面,能真正快速的訪問AutoCAD圖形資料庫
    基本步驟:
  4. 在Objectarx 工程中新增一個類SaveReactor, 繼承基類AcApDocManagerReactor,重新實現一個關於儲存命令的虛擬函式,程式初始化時建立這個類物件。
    2.讀取CAD圖中的所有實體的屬性值
    3.將實體屬性值利用SHA演算法得到hash值
    4.利用openssl庫生成公鑰私鑰,對hash值進行私鑰加密,得到的資訊存入到簽名實體中(將公鑰也放入)
    5.在儲存命令函式中,先讀取CAD的屬性值,hash處理,然後將簽名實體中的資訊公鑰解密,進行比較,相同則圖紙沒改變,不相同則改變

對稱加密:
甲方選擇某一種加密規則,對資訊進行加密
乙方使用同一種規則對資訊進行解密
它的缺點就是必須將加密規則告訴對方否則無法解密,金鑰的儲存與傳遞就成為了問題

非對稱加密:
乙方生成兩把金鑰(公鑰和私鑰),公鑰是公開的,私鑰是保密的
甲方獲得了乙方的公鑰用它進行加密
乙方得到了加密後的資訊用私鑰進行解密

數字簽名主要是對資料的安全性,防止被篡改,但是資料你是看得到的(私鑰加密公鑰解密)
而加密是對資料進行一個保密,使的攻擊者看不到內部原始資料(公鑰加密私鑰解密)

RSA演算法的具體流程:
http://www.ruanyifeng.com/blog/2013/07/rsa_algorithm_part_two.html
原理:大整數的因數分解,是一件非常困難的事情。目前,除了暴力破解,還沒有發現別的有效方法
1. 選質數p,q
2. n=p*q
3. φ(n)=(p-1)*(q-1)(尤拉函式:任意給定正整數n,請問在小於等於n的正整數之中,有多少個與n構成互質關係)
4. 選擇質數e from(1, φ(n))
5. 選擇模反元素d, ed ≡ 1 (mod φ(n))如果兩個正整數a和n互質,那麼一定可以找到整數b,使得 ad-1 被n整除,或者說ad被n除的餘數是1,d就是模反元素
6. 公鑰(n,e) 私鑰(n,d)
7. 加密:資料m, m的e次方≡ c (mod n),得到加密資訊c
8. 解密:  c的d次方 ≡ m (mod n)