android 国密签名,关于国密 (sm2,sm3,sm4)在Linux、python、Android、java、ios中的...
國密即國家密碼局認定的國產密碼算法。主要有SM1,SM2,SM3,SM4和最新的sm9。在國內環境主要使用的國家密碼局認定的算法。
SM2算法:SM2橢圓曲線公鑰密碼算法是我國自主設計的公鑰密碼算法,包括SM2-1橢圓曲線數字簽名算法,SM2-2橢圓曲線密鑰交換協議,SM2-3橢圓曲線公鑰加密算法,分別用于實現數字簽名密鑰協商和數據加密等功能。SM2算法與RSA算法不同的是,SM2算法是基于橢圓曲線上點群離散對數難題,相對于RSA算法,256位的SM2密碼強度已經比2048位的RSA密碼強度要高。
其實就是類似RSA算法,但是大家都知道,RSA算法位數要求已經在2048以上了,SM2不同的是可以使用較少的位數保證較強的密碼強度。
SM3算法,SM3雜湊算法是我國自主設計的密碼雜湊算法,適用于商用密碼應用中的數字簽名和驗證消息認證碼的生成與驗證以及隨機數的生成,可滿足多種密碼應用的安全需求。為了保證雜湊算法的安全性,其產生的雜湊值的長度不應太短,例如MD5輸出128比特雜湊值,輸出長度太短,影響其安全性SHA-1算法的輸出長度為160比特,SM3算法的輸出長度為256比特,因此SM3算法的安全性要高于MD5算法和SHA-1算法。
與md5相似,但是比md5更長,具有更高的安全性。
SM4算法:分組密碼算法是我國自主設計的分組對稱密碼算法,用于實現數據的加密/解密運算,以保證數據和信息的機密性。要保證一個對稱密碼算法的安全性的基本條件是其具備足夠的密鑰長度,SM4算法與AES算法具有相同的密鑰長度分組長度128比特,因此在安全性上高于3DES算法。
與AES相似。
SM9算法:是由國密局發布的一種IBE(Identity-Based Encryption)算法。IBE算法以用戶的身份標識作為公鑰,不依賴于數字證書。
一種新型的公私鑰算法,基于身份標識的。
openssl的編程初探
在算法實現中,不免要使用openssl庫來進行操作,openssl 很強大,提供了健壯的,全功能的加密套件。
openssl官網
有興趣的同學可以詳細去學習下,openssl有著大量的API可以使用,可以實現大量的密碼算法。
開源算法(gmsll.org)
這里我使用的是北京大學 關志 副研究員的密碼學研究組開發維護的 GmSSL ,此項目上openssl的分支,可以替代openssl,并增加了對國密的支持.
在網上找了很多關于此開源庫的使用方法,都不是很明白,我對這個項目的使用方法做一個總結,可以支持在多個平臺上使用。
下面我們來看看具體的使用方法
示例代碼可以在?github?上面可以下載得到,給出了測試代碼,可以直接進行下載調試,主要實現的是?sm2的加解密?,?sm4的加解密?,歡迎star。
使用方法都是:編譯GmSSL庫,得到對應的文件。
引用文件。
使用對應語言調用。
編譯環境為(macbook + ubuntu虛擬機)
evp api
介紹
首先是?EVP API?,這是對GmSSL接口的一個封裝,隱藏了API實現的細節,提供了一個抽象的,統一的接口。我們可以借助這個接口來實現其他平臺的使用。
編譯
我在Ubuntu環境下面
./config
make
make成功后,生成?libcrypto.so.1.1 和 libssl.so.1.1
在code文件夾下面,編寫自己的sm4.c,utils.c,sm2.c
然后利用下面的代碼進行編譯。
gcc -Wall code/sm4.c code/sm2.c code/utils.c -o my_gmssl -lssl -lcrypto -L. -I include -I apps -I . -L /usr/lib/ssl
測試
編寫測試代碼:
運行結果:
測試成功。
java?API的使用方法(Android)
介紹
在Android里面調用這個庫的方法,主要是通過編譯.so動態鏈接庫的方式進行引用。在官方的 github 中,已經給出了相關代碼,但是缺少了ndk編譯過程。
編譯
坑
有些手機里面并不支持,.so.1.1的soname,所以在引用libssl.so.1.1 和libcrypto.so.1.1的時候出現了問題,解決方法是
readelf -d libssl.sorpl -R -e .so.1.1 '_1_1.so' libcrypto.sorpl -R -e .so.1.1 '_1_1.so' libssl.so
python?調用方法
坑
當使用memcpy或者strcpy進行復制結果字符串時,在c語言里面運行正常,但是引入到python里面的時候會出現多一位或幾位字符的情況,所以輸出結果轉換成了16進制字符串,這樣結果就穩定了。
總結
以上是生活随笔為你收集整理的android 国密签名,关于国密 (sm2,sm3,sm4)在Linux、python、Android、java、ios中的...的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Mac(苹果)电脑打开资源库的方法
- 下一篇: 太好用了!Linux服务器上必备的4个开