如何在Java中生成伪随机的“可读”字符串?

2022-09-03 09:41:11

生成给定长度的真正随机字符串是一个相当简单(并且已经很好地覆盖)的任务。

但是;我想生成一个“伪”随机字符串,其中包含一个额外的约束,即它相对容易阅读(对于以英语为母语的读者)。

我认为另一种说法是说生成的字符串应该由“可识别的音节”组成。例如,“akdjfwv”是一个随机字符串,但它根本无法识别。“弗拉米奥姆”;然而,是非常“可识别的”(即使它是无稽之谈。

显然,人们可以列出一长串“可识别的音节”,然后随机选择它们。

但是,有没有更好的方法来做一些事情,比如以编程方式生成一个“可识别的音节”,或者生成一个“音节”,然后测试它以查看它是否“可识别”?

我可以想出几种方法来实现这个实现,但是如果有人已经实现了它(最好是在Java或C#中),我宁愿重用他们的工作。

有什么想法吗?


答案 1

您可以尝试实现马尔可夫链,并为其提供合适的处理通道。有一个Java实现可能适合您。

这是在英语的创世记和西班牙语的创世记之间插值的示例(N = 1):

In bersaran thelely and avin inder tht teathe m lovig weay waw thod mofin he t thte h fupiteg s o t llissed od ma.lllar t land fingujod maid af de wand tetodamoiz fosu Andesp.ersunen thenas lowhejod whipanirede tifinas Gofuavithila d gió Y Diche fua Dios co l, liens ly Y crerdíquen ticuesereregos hielase agúnd veumarbas iarasens laragún co eruerá laciéluelamagúneren Dien a He.


答案 2

我认为这应该做你想做的事:

Java 密码生成器

它具有源代码和宽松的许可证,因此您可以根据自己的要求调整源代码。