我现在有一个注册码明文:
endTime:2021-12-12 12:12:12@username:qq1234567@startTime:2021-11-11 11:11:11
这个注册码很简单, 包含了开始时间、过期时间、用户名 3 个字段,
在注册机上,我想用某个算法把它加密,发给客户
客户再把机密后的注册码输入软件,软件根据某个算法解密,然后判断是否 还能使用
我研究了一下:
md5 摘要算法, 破解门槛太低
其他的一些加密算法,似乎算出来的结果,位数太长了, 动辄位数上百,甚至更长
我希望加密后的信息,长度尽可能控制在 100 位以内
不知道大家有啥建议吗?
这个算法不需要太高级 , 不是什么大软件, 只要能防住一般小白即可
谢谢
1
horizon 2021-10-22 13:12:56 +08:00
MD5 破解门槛低吗。。
|
2
shawnsh 2021-10-22 13:17:50 +08:00 via Android
MD 5 不是加密算法,因为不能解密
|
3
aggron 2021-10-22 13:19:42 +08:00
pbkdf2 或者 bcrypt
|
4
xiaopc 2021-10-22 13:25:47 +08:00 via iPhone
首先,你这明文要是能在 client 「解密」,就只能用加密而不是摘要算法
其次,更简单破解的方式不是直接跳过解密吗,再强的算法也不防逆向 最后,MD5 哪年被「破解」了,最多是彩虹表和对撞 |
5
dilu 2021-10-22 13:29:02 +08:00
重要功能放到服务端来做就行,客户端不管怎么搞都没用的
|
6
find456789 OP |
7
crab 2021-10-22 14:00:37 +08:00
@find456789 AES,密钥 对方机器码(cpu 硬盘 等等序列号或者用户名)+你自己随便添加一些
|
8
SingeeKing 2021-10-22 14:11:22 +08:00
最简单的 异或 轻松防小白
|
9
sadfQED2 2021-10-22 15:44:18 +08:00 via Android
其实吧,你随便 aes 加密下就行了,你要是真遇上逆向大佬,用什么加密算法都白搭。
随便加密下,防防普通人就行了 |
10
sadfQED2 2021-10-22 15:45:17 +08:00 via Android
@find456789 base64 肯定不行啊,base64 md5 这些都不是加密
|
11
MatDK 2021-10-22 16:19:45 +08:00 1
如果要 1 个简单算法:
1. 把 username 扩展到 128 位 (可以用 kdf,偷懒就填充 1/0,或者自己定义 1 个填充得序列,写到程序里面) 2. 用 AES/ChaCha20 加密 优点是长度和注册码长度基本一致 如果要 1 个高级的算法: 1. 自己生成一对公私钥 2. 私钥自己留着存好,公钥可以写到程序里面去 3. 注册码= BASE64[Sign(私钥,注册码明文)+注册码明文] 验证得时候 Verify (公钥,注册码签名) 缺点是长度估计超标了 |
12
arthurire 2021-10-22 16:39:22 +08:00
注册码一般都会有一个类似于识别码的东西, 比如把对方硬盘序列号什么的或者配置信息做个加密,比 QQ 好很多,不然其实涉及到泄露隐私的问题,我有注册码就能找到对方 QQ,我觉得挺蠢的.
也不要想着"通过加解密算法来提升破解难度",不现实,对方把你的 je 改成 jne 或者改成 jmp 你这验证就白做了.对于普通软件而言这个工作我十一二岁就会了,难度非常低. @MatDK 说的很详细了. 长度超标问题,大部分软件是靠一个文本文件解决的(改后缀到 xxx.key),或者给你一个窗口让你贴一大段注册码. |
13
ysc3839 2021-10-22 16:57:40 +08:00
要验证有效性的话基本都是用非对称加密算法,生成注册码时用你的私钥签名,校验时用公钥验证。
可以自己看看 RSA 的原理,然后自己写一个,降低密钥长度即可减少生成后的长度,但是会更容易解出私钥。 另外加长密钥虽然能在算法层面防止破解,但是还是防不了直接修改程序。 |