Encryption SM2-SM4 C# interacts with OpenSSL(SM2-SM4 c#加密與OpenSSL交互)(二)

本文固定連接

今天還好,時間上湊合,前段時間的手痛手麻的問題估計跟頸椎有關,所以大家還是要關注健康,別蝦雞吧聽那些白癡老闆說加班,奮鬥,等你這裏疼,那裏疼的時候,這羣貨一定會把你從他的地盤踹了。所以:

生活的全部不是工作,工作也不能代表生活;詩和遠方也許有牛糞、蚊子和飢腸轆轆,但一定是愜意的。

下面繼續分享國密加密算法中c#跟Openssl之間的交互,這次分享下碰到的問題。

如果不知道這兩者的話請看前面的分享。

Encryption SM2-SM4 C# interacts with OpenSSL(SM2-SM4 c#加密與OpenSSL交互)(一)

另外,我提交的Unity Asset Stone的資源大家可以下載,包含完整的示例。不過你想請我吃六塊的大餅卷燒麥就更好了。

也發個鏈接:
Unity Asset Store URL

Short URL

請忽視紅框中的版本

需要指出來的是,因爲我當時做的時候順手就用了一個挺高版本的Unity,想換回去又麻煩。額。。。。
其實代碼應該是2017以上的版本都能用,如果工程運行不了,直接遷移一下就行(這是個知識點,要劃重點哦,怎麼遷移工程,至少有三種方法哦。)

//----------------------------下面是重點------------------------------------------//
1、SM4 ECB Encrypt和Decrypt的問題。
如果c#或者openssl單獨自己解密加密沒問題,但是已交互間歇問題,你可以試試把c#的isPadding解密設置爲false,
在這裏插入圖片描述
因爲看源碼就會發現,二者的區別原理都一樣,無非是補充位。
在這裏插入圖片描述

在這裏插入圖片描述

有時候Openssl傳過來的值會有差異。

看看源碼應該懂吧。你就明白了。

2、關於c# SM2 BigInteger轉byte[]後位數不足。
對於c# 的BigInteger轉byte[]的方式是:

BigInteger bigInt = c1.Value;
byte[] byteUnsigned = bigInt.ToByteArrayUnsigned();

但是通常會不夠位數,需要補零。

因此你需要操作如下代碼:

byte[] bus = input.ToByteArrayUnsigned();

byte[] busn= new byte[32];

bus.CopyTo(busn, 32 - bus.Length);

懂我意思了吧。

還有一些其他的問題,我下次再說吧。喲事情去了。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章