有没有可逆的、能够保留原数据格式的数字加密算法

2018-06-11 16:01:13 +08:00
 reid2017
如题,需要对一串数字字符串进行加密,但必须保留原数据格式,即加密后仍是数字,且长度一致
如:「 12345 」-> 「 56789 」

要求算法是可逆的,即能够解密出原数据是什么

或者说应该叫『混淆』算法

有没有 V 友能够给点思路如何实现?

用 java 的就最好了
5070 次点击
所在节点    程序员
16 条回复
crazyzzm
2018-06-11 16:07:07 +08:00
简单的加减乘除混合就行
zhicheng
2018-06-11 16:11:19 +08:00
所有的字符串都可以转换成一串组数字。
hyq
2018-06-11 16:12:21 +08:00
rot13
cctv1005s927
2018-06-11 16:12:54 +08:00
压缩算法了解一下?
zhujinliang
2018-06-11 16:15:32 +08:00
打个表,一共 5 个数字的话就做 5 个数组,每个数组表示从 0 到 9 的替换关系,比如[9,7,5,3,1,0,8,6,4,2]表示用 9 替换 0,7 替换 1,5 替换 2...每位做一个表,加密时正向替换,解密时逆向替换
moln
2018-06-11 16:18:45 +08:00
直觉告诉我这样的加密安全性很低
moln
2018-06-11 16:22:21 +08:00
生成一个等长的伪随机数做异或运算吧,解密的时候生成同样的伪随机数再异或一次就行了
VoidChen
2018-06-11 16:30:44 +08:00
借个楼问下有没有相关的文本压缩算法
tomychen
2018-06-11 16:32:57 +08:00
我说 xor 会挨打不 (逃
fcce
2018-06-11 16:35:34 +08:00
xor
pelloz
2018-06-11 16:38:15 +08:00
恺撒加密,安全性=无
shakoon
2018-06-11 16:40:14 +08:00
楼主你说的这不叫加密,叫散列,或哈希,安全性基本不能保证
annielong
2018-06-11 16:46:57 +08:00
以前记得有个 6*6 的网格加密方法,本质是纸上游戏,但是可以转换成电子版,首先做一个 6*6 的网格,然后分成 3*3 的 4 个,每个 3*3 里面写上 1-9,然后按数字顺序 1-9,从每个 3*3 里面涂掉一个数字,一直到每个 3*3 里面只剩一个数字,这时候把数字格扣掉,使用的时候把 6*6 的网格放在纸上,在扣掉的洞里面写字,写完旋转 90 度继续写,直到写满 36 个字符,
liberize
2018-06-11 17:23:26 +08:00
ROT13 +1
oott123
2018-06-11 23:00:21 +08:00
1. 编码:把你要加密的数字用二进制表示。
2. 加密:应用任何密码学算法加密。
3. 解码:把加密后的二进制结果用十进制表示。

同理,可替换任何编码解码算法达成你的目标。
stillwaiting
2019-07-30 15:09:05 +08:00
偶然搜索到这个主题。。
参考下 https://github.com/idealista/format-preserving-encryption-java
https://en.wikipedia.org/wiki/Format-preserving_encryption
这个实现的应该是 NIST 的 FF1 和 FF3
要实现其他保持特有格式,比如信用卡号、日期,需要参考下相关论文,目前没有看到相关实现

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/462194

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX