有 相同输入但每次输出不同 的编码方式/算法吗?

2020-07-08 16:17:16 +08:00
 lxk11153
  1. 输入相同内容
  2. 每次输出结果不同
  3. 拿 2 的结果去解码得到 1

反例: 把"zxcvbn"拿去 base64,每次结果都一样

3048 次点击
所在节点    问与答
37 条回复
kop1989
2020-07-08 16:19:25 +08:00
密钥可变么?如果密钥可变就可以。
比如以当前时间年月日作为密钥,今天生成的和明天生成的密文就不同,但通过对应的密钥可以恢复为同样的明文。
kop1989
2020-07-08 16:21:20 +08:00
反之,如果密钥不可变,加密效果就会很差,因为会导致多个密文对应一个明文。非常容易被人暴力破解。
lxk11153
2020-07-08 16:26:14 +08:00
@kop1989 #1 有不使用密钥的吗?我只是想每次结果不同,不需要安全性高,编码算法即可(可以不用加密算法)
(这里好像可以延伸出一个办法: 使用时间戳作为密钥,把密钥拼接在输出上,解码时先区分密钥和密文,然后解码。但是这种方法就是不像 base64 这种被大家熟知,随便找个网站 /命令行都可以解码)
kop1989
2020-07-08 16:34:14 +08:00
@lxk11153 #3 抱歉没理解清楚,如果是只编码的话,就爱莫能助了,没听说过。
不过能不能大概透露下使用场景,我思考了以下你这种方式貌似只有缺点没有好处😂
murmur
2020-07-08 16:34:25 +08:00
我记得 RSA 这些非对称加密每次的结果似乎都不一样
SuperMari0
2020-07-08 16:34:33 +08:00
这不就是 rsa 么
SuperMari0
2020-07-08 16:35:17 +08:00
不过 rsa 不算是编码
lxk11153
2020-07-08 16:42:42 +08:00
@kop1989 #4 我举个例子,比如 A 站回帖个 base64 的联系方式,B 站回帖个 base64 的联系方式,搜索引擎一搜,AB 站的账号就关联到同一个人了
@murmur #5 ↑
@SuperMari0 #6 ↑
hyperbin
2020-07-08 16:50:52 +08:00
数学上不可能,输入变量有变化输出变量才会有变化
darknoll
2020-07-08 17:22:32 +08:00
没有
churchmice
2020-07-08 17:25:40 +08:00
lz 先说你的原始需求吧
感觉你走错路了
0DBBFF
2020-07-08 17:26:24 +08:00
@lxk11153 如果只是解决这种问题,你可以在原始数据后面加空格,base64 输出就不同。一般不应该阅读还是能成功联系你还不会暴露同一人
zhs227
2020-07-08 17:28:23 +08:00
参考对称加密的 IV,用前面的字符表示向量,后面加密。举例,想加密的数是 3,我可以输出:
5-2
7-4
113-110
然后以某个随机数 rand 就可以了
JeffGe
2020-07-08 18:03:44 +08:00
仅以你 3# 的需求 8# 的场景来说,利用一些简单的对抗自动采集或机器审查的手段替换原文就行了,例如对以下文本进行 base64
someone@example.com
someone(at)example.com
{someone@example.com}
som 删 eon 除 e@exa 汉 mple.c 字 om
lxk11153
2020-07-08 18:20:07 +08:00
@churchmice #11 参见 8 楼
@0DBBFF #12 没用的,虽然加了干扰,输出的整串是不同了,但关键信息所在的子串是一样的
@zhs227 #13 想法感觉不错耶,你比如说我想回帖"😁笑",我可以回
- String.fromCodePoint(0x1f600+1,0x7b10+1)
- String.fromCodePoint(0x1f601+0,0x7b11+0)
- String.fromCodePoint(0x1f602-1,0x7b12-1)
chizuo
2020-07-08 18:25:22 +08:00
建议楼主上一些网络安全,密码学的课。真的,就是提的问题很幼稚,但是题主却很认真,所以希望你可以去读一下书或上一下课,更能帮助你。
mlnotes
2020-07-08 18:31:49 +08:00
RSA 啊,public key 加密相同的内容,每次密文都不一样,但用 private key 解密出来的内容又都是一样的
lxk11153
2020-07-08 18:38:04 +08:00
@mlnotes #17 参见 3 楼,"但是这种方法就是不像 base64 这种被大家熟知,随便找个网站 /命令行都可以解码"

只想做一些类似 14 楼那样的简单对抗,并不用那么安全,以及让别人解不开,想要的是让别人可以方便的解开,但避免相同来简单对抗下信息关联(参见 8 楼)
lxk11153
2020-07-08 18:39:11 +08:00
@chizuo #16 像极了前女友说的"你是个好人,但我们不合适" :doge
misdake
2020-07-08 18:55:11 +08:00
要用某种可反向操作的规律向输入数据中加一些冗余且相对随机的数据,用某种一一对应地编码跑一遍生成“密文”,解密的时候把冗余数据剔除,重组成原文。
用你上面 base64 的例子的话,如果安全要求不高,可以在输入的每个 bit 之间都插入一个随机的 0 或 1,然后 base64 。解密的时候把中间的 bit 都去掉重组。

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

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

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

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

© 2021 V2EX