加密的字串大概30位時就會出錯,不知道為什麼,產生的密鑰長度是256位的
回複內容:
明文長度(Bytes) <= 密鑰長度(Bytes)- 11
256bits = 32bytes
最長明文長度 = 32 - 11 = 21bytes = 168bits感謝@鐘宇騰的回答,沒有padding的RSA稱為Textbook RSA,是在教科書中所教的基於數學原理的RSA,如Wikipedia頁面的RSA定義:
這裡所說的M指的是要加密的資料,但在實際應用的時候卻不一定為明文本身。
如果明文不加以處理則有可能受到攻擊。
舉個簡單的例子:
當選擇很小的值,如;而且,這時加密後的資料就會變成:
只需要計算一個開三次根號就可以得到原文。
在PKCS #1 v2.1標準裡面有定義這個padding RFC 3447 - Public-Key Cryptography Standards (PKCS) #1: RSA Cryptography Specifications Version 2.1
Steps: 1. Length checking: If mLen > k - 11, output "message too long" and stop. 2. EME-PKCS1-v1_5 encoding: a. Generate an octet string PS of length k - mLen - 3 consisting of pseudo-randomly generated nonzero octets. The length of PS will be at least eight octets. b. Concatenate PS, the message M, and other padding to form an encoded message EM of length k octets as EM = 0x00 || 0x02 || PS || 0x00 || M.
RSA的標準裡面是沒有padding的。
但根據RSADSI頒布的RSA加密解密標準PKCS#1(為了避免RSA演算法的一些漏洞),在加密的時候,會在data前面加入至少11bytes的padding
第一byte全置0
第二byte為格式位,全置2時為加密,全置1時為簽名
接著是至少八byte的padding,random nonzero。
最後一byte全置0
因此padding總長至少為11byte。