2012-04-03 84 views
0

重寫的問題,因爲它似乎我不夠具體;Java的正則表達式範圍

給定一個RSA系統p = 263,q = 587,公鑰Ê = 683和私有密鑰d = 81599.因此Ñ = PQ = 154381。對於一個消息,說「我是學生」,加密如下進行:

  • 轉換任何字母(inclu ding空格)轉換爲3位ASCII碼,即073 032 065 077 032 065 032 083 084 085 068 069 078 084.
  • 加入每兩個相鄰的ASCII碼形成一個塊,即073032 065077 032065 032083 084085 068069 078084.(如果最後一封信沒有任何內容,則使用000)。
  • 使用加密算法Ç =Ë MOD Ñ到每塊加密; Ç = 73032 MOD 154381 = 103300等

假設你是一個消息的接收器:33815872282353670979238213794429016637939017111351.是什麼內容?

經過一番考慮後,我在考慮,因爲我必須解碼部分,即解碼33815,然後87228等,等等,我應該只是將解碼部分分成兩半,並檢查是否每個一半在ascii範圍內,如果不是,則返回到原始並以不同的方式分割。這聽起來像是一個更好的解決方案,而不是試圖用正則表達式來破解一些東西嗎?

P.S.解碼被認爲是家庭作業,我手工完成了這一工作,並且知道信息解碼爲「我討厭密碼學」(看起來我的講師有幽默感),所以你不幫我做作業。把它變成一個程序只是一些額外的課程,我認爲它可能很有趣。

+4

您能否更詳細地描述一下您嘗試使用RSA實現的目標?我們可以用你的正則表達式來幫助你,但是我覺得在所有這些上面有更多的錯誤。修復這個錯誤可能會消除您對上述複雜解決方案的需求 – 2012-04-03 12:24:26

+0

我從來沒有直接使用過RSA,但我無法想象這是讓您的角色迴歸的正確途徑。 – stema 2012-04-03 12:28:05

+0

RSA是否將消息解碼爲「byte []」?我知道它沒有解碼成字母數字的字符串表示。你應該可以做一個'new String(bytes)'來獲取關聯的'String'。 – Gray 2012-04-03 12:41:49

回答

0

這是一個令人難以置信的不好主意,有一個可變長度記錄沒有一個分度或索引。在這種情況下,最好的方法是使用固定寬度的整數,並帶有前導零。

也就是說,你實際上有一個隱含的分隔符,假設你總是從字符串的開頭到結尾讀取而不跳過。如果您取0或1表示是3位數字,而2-9表示2位數字。像這樣的東西會工作:

[01][0-9][0-9]|[2-9][0-9]

但實際上 - 只打印你的號碼與前導零的字符串。或者如果您擔心空間問題,請查看2個字符的十六進制編碼。或Base 64,或其他可打印的編碼之一。