RSA 分段加解密 解決「不正確的長度」的異常

2022-07-31 09:48:14 字數 2042 閱讀 3543

方法1:

rsa 是常用的非對稱加密演算法。最近使用時卻出現了「不正確的長度」的異常,研究發現是由於待加密的資料超長所致。

.net framework 中提供的 rsa 演算法規定:

待加密的位元組數不能超過金鑰的長度值除以 8 再減去 11(即:rsacryptoserviceprovider.keysize / 8 - 11),而加密後得到密文的位元組數,正好是金鑰的長度值除以 8(即:rsacryptoserviceprovider.keysize / 8)。

所以,如果要加密較長的資料,則可以採用分段加解密的方式,實現方式如下:

**:namespace macroresolute.rsacryptoservice

return convert.tobase64string(crypstream.toarray(), base64formattingoptions.none);}}

}public static string decrypt(this string ciphertext)

return rsacrypto.encoder.getstring(plaistream.toarray());}}

}private static x509certificate2 retrievex509certificate()}}

方法2:

rsacryptoserviceprovider rsa = new

rsacryptoserviceprovider();

byte data = ........;        

//要加密的資料

string publickey = .... ;  //獲取公鑰

rsa.fromxmlstring(publickey);

int keysize = rsa.keysize / 8;

int buffersize = keysize - 11;

byte buffer = new

byte[buffersize];

memorystream msinput = new

memorystream(data);

memorystream msouput = new

memorystream();

int readlen = msinput.read(buffer, 0,

buffersize);

while(readlen > 0)

msinput.close();

byte result = msoutput.toarray();   

//得到加密結果

msoutput.close();

rsa.clear();

解密時肯定也要使用分段解密,演算法如下:

rsacryptoserviceprovider rsa = new

rsacryptoserviceprovider();

byte key = .....;    //載入私鑰

string privatekey =

encoding.ascii.getstring(key);

byte dataenc = ...;   //載入密文

rsa.fromxmlstring(privatekey);

int keysize = rsa.keysize / 8;

byte

buffer = new byte[keysize];

memorystream msinput = new

memorystream(dataenc );

memorystream msouput = new

memorystream();

int readlen = msinput.read(buffer, 0,

keysize);

while(readlen > 0)

msinput.close();

byte result = msoutput.toarray();   

//得到解密結果

msoutput.close();

rsa.clear();

如何解決訪問頁面路徑不正確的問題

在開發過程中,有時我們需要呼叫一下平台封裝好的某個頁面,如果我們指定完url路徑後發現頁面沒有載入出來 頁面是空白 那麼很可能是路徑不正確,這時我們可以把滑鼠放到空白頁面,然後右鍵,選擇 檢視框架的源 這時我們便可以看到位址列中的位址比如 view source http localhost 808...

cxf解決多網絡卡的ip獲取不正確的問題

今天幫助解決乙個問題,cxf對外發布webservice的時候,由於伺服器是多網絡卡環境,從wsdl返回的ip是乙個內外位址,解析出錯,所以後來在網上查了下,需要設定publishedendpointurl設定網域名稱即可。用ip的時候wsdl如下 如果在spring裡面設定如下配置,即可 最終返回...

vue打包靜態資源路徑不正確的解決方案

vue打包靜態資源路徑不正確的解決辦法 vue專案完成打包上線的時候很多人都會碰到靜態資源找不到的問題,常見的有兩個 1 js,css路徑不對 解決辦法 開啟config index.js,將其中的assetspublicpath值改為 2 css中引用的資源找不到 我的login.vue檔案中通過...