只是玩玩,有没有 DSL
- 可以随机生成
- 操作文本或字符串并恢复它们
- 像倒数密码一样工作。例如,如果生成的函数是
F()
,对于每一个字符串s1
,你可以得到加扰的字符串s2 = F(s1)
。然后G()
可以推导出另一个反转F()
,即G(s2) = s1
。 F()
并且G()
可以相同或不同。
还有几个额外的问题:
任何编程语言都可以自动推导出逆向函数?
并确保生成的函数
F()
是可逆的?
或者我可以从哪里开始的任何提示?
谢谢!
只是玩玩,有没有 DSL
F()
,对于每一个字符串s1
,你可以得到加扰的字符串s2 = F(s1)
。然后G()
可以推导出另一个反转F()
,即G(s2) = s1
。F()
并且G()
可以相同或不同。还有几个额外的问题:
任何编程语言都可以自动推导出逆向函数?
并确保生成的函数F()
是可逆的?
或者我可以从哪里开始的任何提示?
谢谢!
一个很好的起点是用于分组密码的 Feistel 网络构建。从本质上讲,它是一个从函数构建迭代分组密码的基本框架。对函数的要求很少——它只需要一个根据密钥修改一条消息的函数。无论功能是什么,密码都将起作用;但是,函数的性质会影响密码的安全性。
http://en.wikipedia.org/wiki/Feistel_cipher
要回答您的其他一些问题:
任何编程语言都可以自动推导出逆向函数?
一般不会。特别是因为许多(大多数!)函数根本不可逆。
并确保生成的函数 F() 是可逆的?
使用Feistel网络建设将保证这一点。
回答我自己的问题:
http://en.wikipedia.org/wiki/Reversible_computing
http://strangepaths.com/reversible-computation/2008/01/20/en/
看起来它主要是理论上的 CS,所以这种 DSL 还没有被发明出来。
到目前为止prolog可以做可逆功能