為什麼rsa加密時我把密鑰長度設成256位,太長的字串加密就會出錯?

來源:互聯網
上載者:User
加密的字串大概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。
  • 聯繫我們

    該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

    如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

    A Free Trial That Lets You Build Big!

    Start building with 50+ products and up to 12 months usage for Elastic Compute Service

    • Sales Support

      1 on 1 presale consultation

    • After-Sales Support

      24/7 Technical Support 6 Free Tickets per Quarter Faster Response

    • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.