【问题标题】:Decoding an Encrypted Message解码加密消息
【发布时间】:2011-10-30 01:29:46
【问题描述】:

我正在用 java 实现我自己的 RSA 算法。 到目前为止,我已经开始工作了,我希望能够加密消息字符串,例如。 “你好” 它是一个非常基本的版本,目前没有使用任何大量数字。

所以我读到的每个字母都得到了它的 Ascii 代码并对其进行了 endcode。

但是我在试图找出一种读取它输出的数字序列的方法时遇到了问题。

说你好加密的数字序列是; H E L L 0 101 123 111,111,101(这些只是随机选择的数字)

所以说我的消息变成了 101123111111101

如果我读回这些数字,我怎么知道要解密哪些部分?我的第一个想法是在数字之间使用某种分隔符,例如 101,123,111,111,101

并在读回时解析它们? 还是我错过了什么?

如果我更改我的公钥和私钥并且数字变得更大和更随机,这会在以后引起问题吗?

【问题讨论】:

  • “我正在用 java 实现我自己的 RSA 算法” - 现在为什么这不是一个好主意?
  • @MitchWheat - 大声笑,可能出了什么问题?
  • 您是否分别加密了每个字符?这是错误的。它很弱,可以很容易地解密。例如,如果您发送一长串加密值,可以猜测 H 总是映射到 101。
  • 有时人们编写代码只是为了学习——不一定要成为 Bouncy Castle 的竞争对手才能具有教育意义。
  • @MitchWheat 是的,我同意。不过,也不愿意将某人扔到公共汽车下戳它。

标签: java algorithm encryption rsa


【解决方案1】:

如果每个代码的数字长度完全相同,那么您可以每隔这么多字符拆分内容。例如,最后两位使用 0-9,第一位使用 1-9,即 9 乘以 10 的 2 次方,有 900 种可能性。因此,假设您决定为所有内容分配一个唯一的 3 个数字。

例如 A=171、B=182、C=193、D=204、E=215 等

然后在读取文件时使用子字符串。然后将每个转换回相应的值。但是你应该做的是让它更难解密,一次为两个字母/数字使用不同的值

你好: 他:10291 LL : 19024 0 : 11958

等等。这将使解密变得更加困难,成倍地变得更加困难,并且您可以一次继续解密 3、4、5、6 甚至更多。

【讨论】:

  • 你的数学有点不对劲。十进制数字,0-9;因此有“十进制”这个词。 3 个十进制数字可以编码 1000 个不同的值,等等。
  • 你有 3 次 0-9 可以出现,这意味着你有 10 的三次方,10*10*10。我说 9*9*9 是因为在 java 中有时会使用 002,例如,java 会将其缩短为 2,并且您会丢失两个 0。如果您然后将所有内容都放在一条消息中,那么之后的任何内容都会向左移动两位数,因此单词会混淆。一个字符串可以解决这个问题,但对于大多数目的,您可能想要使用一个 int,因为这样您就可以为该值提出一个算法,而不必像存储每个值一样。而且现在想想,应该是9*10*10或者900。谢谢
猜你喜欢
  • 2022-11-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-11-01
  • 2021-07-04
  • 2021-04-21
  • 2012-01-17
  • 2015-04-11
相关资源
最近更新 更多