C RSA 分段加解密

2021-09-07 07:10:42 字數 1391 閱讀 4656

rsa加解密:

1024位的證書,加密時最大支援117個位元組,解密時為128;

2048位的證書,加密時最大支援245個位元組,解密時為256。

加密時支援的最大位元組數:證書位數/8 -11(比如:2048位的證書,支援的最大加密位元組數:2048/8 - 11 = 245)

.net中的rsa加密演算法為了提高安全性,在待加密資料前要新增一些隨機數,因此,使用.net中的rsa加密演算法一次最多加密117位元組資料(多於117位元組需要拆分成多段分別加密再連線起來),經過加密後得到乙個長度為128位元組的加密資料。

rsa實際可加密的明文長度最大也是1024bits,但問題就來了:如果小於這個長度怎麼辦?就需要進行padding,因為如果沒有padding,使用者無法區分解密後內容的真實長度,字串之類的內容問題還不大,以0作為結束符,但對二進位制資料就很難理解,因為不確定後面的0是內容還是內容結束符。只要用到padding,那麼就要占用實際的明文長度,於是才有117位元組的說法。我們一般使用的padding標準有noppadding、oaeppadding、pkcs1padding等,其中pkcs#1建議的padding就占用了11個位元組。如果大於這個長度怎麼辦?很多演算法的padding往往是在後邊的,但pkcs的padding則是在前面的,此為有意設計,有意的把第乙個位元組置0以確保m的值小於n。這樣,128位元組(1024bits)-減去11位元組正好是117位元組,但對於rsa加密來講,padding也是參與加密的,所以,依然按照1024bits去理解,但實際的明文只有117位元組了。

c#**實現:

rsa 填充模式:pkcs1padding

分片大小: 加密244、解密256

internal

static

string getencryptedmsg(string

xml)

else

++i;

}crypstream.position = 0

; encrypteddata =crypstream.tobytes();}}

}return bitconverter.tostring(encrypteddata).replace("

-", string

.empty);

}internal

static

byte getdecryptedmsg(byte

encryptedbytes)

else

++i;

}decrypstream.position = 0

; decrypteddata =decrypstream.tobytes();}}

return

decrypteddata;

}}

Java RSA 分段加解密

rsa加解密 1024位的證書,加密時最大支援117個位元組,解密時為128 2048位的證書,加密時最大支援245個位元組,解密時為256。加密時支援的最大位元組數 證書位數 8 11 比如 2048位的證書,支援的最大加密位元組數 2048 8 11 245 public static byte...

C RSA加密 解密

rsa公鑰加密演算法是1977年由ron rivest adi shamirh和lenadleman在 美國麻省理工學院 開發的。rsa取名來自開發他們三者的名字。rsa是目前最有影響力的公鑰加密演算法,它能夠抵抗到目前為止已知的所有密碼攻擊,已被iso推薦為公鑰資料加密標準。rsa演算法基於乙個十...

加解密方法

imports system imports system.security.cryptography imports system.text imports system.io public class encryptor private shared iv as byte private sha...