Encryption

將純文字轉換為數字以使用 RSA 加密

  • March 4, 2020

加密函式的所有數學描述都假定,儘管使用了plaintext一詞,要加密的消息是一個數字序列。例如 RSA 與 $ n=pq $ 假設一個人想要加密一個數字 $ x $ 少於 $ n $ 而不是由字母組成的消息。它說加密形式 $ x $ 是 $ x^e\pmod m $ . 在加密之前是否有任何(開放)標準將文本轉換為數字?

由於 ASCII 值只能達到 256。是否將純文字(一次說 10 個字元)讀取為以 256 為基數的 10 位數字?這是我自己的猜測。我實際上想知道該行業遵循的確切標準。

在加密之前是否有任何(開放)標準將文本轉換為數字?

嗯,是的,也不是。

有將每個字元轉換為單個程式碼點的 Unicode 標準。但這不是您所追求的,您想將完整的文本編碼為數字。


為此,標準的操作方式是使用兩種轉換:

  1. 使用字元編碼將文本轉換為字節;
  2. 將字節轉換為(大)數字。

現在 RSA 肯定對數字進行操作,但 RSA PKCS#1 標準被定義為將字節作為輸入。所以第 2 步是稱為 OS2IP 的 PKCS#1 的一個組成部分。OS2IP 表示 Octet String (bytes) to (two) Integer Primitive。OS2IP 簡單地將字節解釋為無符號的大端數。

然而,OS2IP 發生填充之後,填充是在輸入字節上執行的。需要填充以確保 RSA 安全。


所以這給我們留下了第一步:將文本轉換為字節。文本作為字元串儲存在電腦中。字元編碼用於將一組字元(字母表)轉換為字節。最合乎邏輯的字元編碼無疑是UTF-8,它將大多數最常見的 Unicode 字元編碼為單字節的 ASCII 兼容表示。

帶有 UTF-8 的 Unicode 絕對是盡可能接近普遍接受的標準。


如果您想嘗試使用原始/教科書/未填充的 RSA,您可以首先使用 ASCII 或 UTF-8 進行編碼,然後使用 OS2IP 將生成的字節轉換為數字 - 但請記住,這是不安全的。

引用自:https://crypto.stackexchange.com/questions/42344