反例: 把"zxcvbn"拿去 base64,每次结果都一样
1
kop1989 2020-07-08 16:19:25 +08:00
密钥可变么?如果密钥可变就可以。
比如以当前时间年月日作为密钥,今天生成的和明天生成的密文就不同,但通过对应的密钥可以恢复为同样的明文。 |
2
kop1989 2020-07-08 16:21:20 +08:00
反之,如果密钥不可变,加密效果就会很差,因为会导致多个密文对应一个明文。非常容易被人暴力破解。
|
3
lxk11153 OP @kop1989 #1 有不使用密钥的吗?我只是想每次结果不同,不需要安全性高,编码算法即可(可以不用加密算法)
(这里好像可以延伸出一个办法: 使用时间戳作为密钥,把密钥拼接在输出上,解码时先区分密钥和密文,然后解码。但是这种方法就是不像 base64 这种被大家熟知,随便找个网站 /命令行都可以解码) |
4
kop1989 2020-07-08 16:34:14 +08:00
@lxk11153 #3 抱歉没理解清楚,如果是只编码的话,就爱莫能助了,没听说过。
不过能不能大概透露下使用场景,我思考了以下你这种方式貌似只有缺点没有好处😂 |
5
murmur 2020-07-08 16:34:25 +08:00 1
我记得 RSA 这些非对称加密每次的结果似乎都不一样
|
6
SuperMari0 2020-07-08 16:34:33 +08:00 1
这不就是 rsa 么
|
7
SuperMari0 2020-07-08 16:35:17 +08:00
不过 rsa 不算是编码
|
8
lxk11153 OP @kop1989 #4 我举个例子,比如 A 站回帖个 base64 的联系方式,B 站回帖个 base64 的联系方式,搜索引擎一搜,AB 站的账号就关联到同一个人了
@murmur #5 ↑ @SuperMari0 #6 ↑ |
9
hyperbin 2020-07-08 16:50:52 +08:00 via Android
数学上不可能,输入变量有变化输出变量才会有变化
|
10
darknoll 2020-07-08 17:22:32 +08:00
没有
|
11
churchmice 2020-07-08 17:25:40 +08:00
lz 先说你的原始需求吧
感觉你走错路了 |
12
0DBBFF 2020-07-08 17:26:24 +08:00
@lxk11153 如果只是解决这种问题,你可以在原始数据后面加空格,base64 输出就不同。一般不应该阅读还是能成功联系你还不会暴露同一人
|
13
zhs227 2020-07-08 17:28:23 +08:00 3
参考对称加密的 IV,用前面的字符表示向量,后面加密。举例,想加密的数是 3,我可以输出:
5-2 7-4 113-110 然后以某个随机数 rand 就可以了 |
14
JeffGe 2020-07-08 18:03:44 +08:00 via Android
仅以你 3# 的需求 8# 的场景来说,利用一些简单的对抗自动采集或机器审查的手段替换原文就行了,例如对以下文本进行 base64
[email protected] someone(at)example.com {[email protected]} som 删 eon 除 e@exa 汉 mple.c 字 om |
15
lxk11153 OP @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) |
16
chizuo 2020-07-08 18:25:22 +08:00
建议楼主上一些网络安全,密码学的课。真的,就是提的问题很幼稚,但是题主却很认真,所以希望你可以去读一下书或上一下课,更能帮助你。
|
17
mlnotes 2020-07-08 18:31:49 +08:00
RSA 啊,public key 加密相同的内容,每次密文都不一样,但用 private key 解密出来的内容又都是一样的
|
18
lxk11153 OP @mlnotes #17 参见 3 楼,"但是这种方法就是不像 base64 这种被大家熟知,随便找个网站 /命令行都可以解码"
只想做一些类似 14 楼那样的简单对抗,并不用那么安全,以及让别人解不开,想要的是让别人可以方便的解开,但避免相同来简单对抗下信息关联(参见 8 楼) |
20
misdake 2020-07-08 18:55:11 +08:00
要用某种可反向操作的规律向输入数据中加一些冗余且相对随机的数据,用某种一一对应地编码跑一遍生成“密文”,解密的时候把冗余数据剔除,重组成原文。
用你上面 base64 的例子的话,如果安全要求不高,可以在输入的每个 bit 之间都插入一个随机的 0 或 1,然后 base64 。解密的时候把中间的 bit 都去掉重组。 |
21
misdake 2020-07-08 18:59:48 +08:00
如果对安全性毫无要求,甚至可以直接随机一个密钥,用某种对称加密算法来加密。分享的时候同时提供密文和密钥。
|
22
reus 2020-07-08 19:04:27 +08:00
所有需要 iv 加密的对称加密都是啊
|
24
ipwx 2020-07-08 19:13:46 +08:00
楼主需要的那东西叫做 IV
|
25
systemcall 2020-07-08 19:26:01 +08:00 via Android
你可以在个人介绍上放个公钥,每次发东西就拿私钥加密,内容多混淆几次
但是采集可能是人工采集,人力并不贵,如果是有价值的东西就可能那样子做。比如以前的人工打码平台就是请了一堆人手动打码 |
26
PHPer233 2020-07-08 19:27:21 +08:00 via Android
RSA 加密就是你说的这种情况
|
27
Hconk 2020-07-08 19:40:33 +08:00 via iPhone
生成随机数,范围可以尽量大,然后用这个随机数作为密钥随便找一种对称加密算法加密,把密钥和加密结果拼接成一个字符串,应该符合了吧。只要随机数范围足够大就能让密钥重复出现的概率低到可以忽略。
|
29
Nich0la5 2020-07-08 22:37:47 +08:00 via Android
加随机数然后用一些经典对称加密手段就好了。
举例 输入 abcd 然后加上 123 组成 abcd123 然后每位+1bcde234 再栅格错位 bd24ce3,计算量足够小,还原也简单 |
30
ob 2020-07-08 22:44:15 +08:00 via Android
#17 楼说的对
|
31
lululau 2020-07-08 22:52:27 +08:00
#!/bin/bash
sed “s/^/$(uuidgen)/“ |
32
churchmice 2020-07-09 11:02:26 +08:00
|
33
af463419014 2020-07-09 14:44:59 +08:00
@lxk11153 rsa 就是随便找个网站就能加密解密,跟 base64 一样方便
|
34
lxk11153 OP @af463419014 #33 实现 rsa/aes 并不难,重点是 rsa 的细节要保持一致,什么 CBC/ECB, 各种 Padding,再加上 key,已经好几个配置项了
@churchmice #32 类似 14 楼,”对输入加上一些干扰“与标题“相同输入”确实有些出入了,但也是符合我的意图的,就是说 1. 相同的输入或者加上干扰,但这干扰对小白们也是可以方便移除的 2. 可以不用安全性,只是避免相同来简单对抗下信息关联 3. 如果是一个编码 /加密算法的话,小白门要能方便的解码出来 |
35
jifengg 2020-07-10 17:39:37 +08:00
function encode(str){return btoa(Array.from(str).map(a=>a+parseInt(Math.random()*10)).join(''));}
function decode(str_base){let m='';Array.from(atob(str_base)).forEach((v,i)=>{m+=i%2==0?v:'';});return m;} 这个算法是,在邮箱地址每个符号中插入一个随机字符[0-9]。解码的时候只取下标为偶数的字符拼接。 |
36
lxk11153 OP 以#8 的场景,或者用 paste.ubuntu.com + 失效时间 来分享
|
37
xxxbin 206 天前
字体加密?在内容中指定加密字体,加载后显示?
|