什么算法适合加密注册码?最好是比较通用的算法,支持的编程语言多一些,位数短一些

2021-10-22 13:10:00 +08:00
 find456789

我现在有一个注册码明文:

endTime:2021-12-12 12:12:12@username:qq1234567@startTime:2021-11-11 11:11:11

这个注册码很简单, 包含了开始时间、过期时间、用户名 3 个字段,

在注册机上,我想用某个算法把它加密,发给客户

客户再把机密后的注册码输入软件,软件根据某个算法解密,然后判断是否 还能使用


我研究了一下:

md5 摘要算法, 破解门槛太低

其他的一些加密算法,似乎算出来的结果,位数太长了, 动辄位数上百,甚至更长

我希望加密后的信息,长度尽可能控制在 100 位以内

不知道大家有啥建议吗?

这个算法不需要太高级 , 不是什么大软件, 只要能防住一般小白即可

谢谢

1314 次点击
所在节点    问与答
13 条回复
horizon
2021-10-22 13:12:56 +08:00
MD5 破解门槛低吗。。
shawnsh
2021-10-22 13:17:50 +08:00
MD 5 不是加密算法,因为不能解密
aggron
2021-10-22 13:19:42 +08:00
pbkdf2 或者 bcrypt
xiaopc
2021-10-22 13:25:47 +08:00
首先,你这明文要是能在 client 「解密」,就只能用加密而不是摘要算法
其次,更简单破解的方式不是直接跳过解密吗,再强的算法也不防逆向
最后,MD5 哪年被「破解」了,最多是彩虹表和对撞
dilu
2021-10-22 13:29:02 +08:00
重要功能放到服务端来做就行,客户端不管怎么搞都没用的
find456789
2021-10-22 13:50:49 +08:00
@horizon
@shawnsh
@xiaopc

谢谢指点,

不好意思,我对这方面不太了解,刚才去深入了解了一下,md5 是摘要算法,且不可逆,所以不适合我的场景

我目前打算选一个 对称的算法 ,具体选哪个,还需要再研究一下

也可能会选 加盐的 base64, 似乎更简单
crab
2021-10-22 14:00:37 +08:00
@find456789 AES,密钥 对方机器码(cpu 硬盘 等等序列号或者用户名)+你自己随便添加一些
SingeeKing
2021-10-22 14:11:22 +08:00
最简单的 异或 轻松防小白
sadfQED2
2021-10-22 15:44:18 +08:00
其实吧,你随便 aes 加密下就行了,你要是真遇上逆向大佬,用什么加密算法都白搭。

随便加密下,防防普通人就行了
sadfQED2
2021-10-22 15:45:17 +08:00
@find456789 base64 肯定不行啊,base64 md5 这些都不是加密
MatDK
2021-10-22 16:19:45 +08:00
如果要 1 个简单算法:
1. 把 username 扩展到 128 位 (可以用 kdf,偷懒就填充 1/0,或者自己定义 1 个填充得序列,写到程序里面)
2. 用 AES/ChaCha20 加密
优点是长度和注册码长度基本一致
如果要 1 个高级的算法:
1. 自己生成一对公私钥
2. 私钥自己留着存好,公钥可以写到程序里面去
3. 注册码= BASE64[Sign(私钥,注册码明文)+注册码明文]
验证得时候 Verify (公钥,注册码签名)
缺点是长度估计超标了
arthurire
2021-10-22 16:39:22 +08:00
注册码一般都会有一个类似于识别码的东西, 比如把对方硬盘序列号什么的或者配置信息做个加密,比 QQ 好很多,不然其实涉及到泄露隐私的问题,我有注册码就能找到对方 QQ,我觉得挺蠢的.

也不要想着"通过加解密算法来提升破解难度",不现实,对方把你的 je 改成 jne 或者改成 jmp 你这验证就白做了.对于普通软件而言这个工作我十一二岁就会了,难度非常低.

@MatDK 说的很详细了. 长度超标问题,大部分软件是靠一个文本文件解决的(改后缀到 xxx.key),或者给你一个窗口让你贴一大段注册码.
ysc3839
2021-10-22 16:57:40 +08:00
要验证有效性的话基本都是用非对称加密算法,生成注册码时用你的私钥签名,校验时用公钥验证。
可以自己看看 RSA 的原理,然后自己写一个,降低密钥长度即可减少生成后的长度,但是会更容易解出私钥。
另外加长密钥虽然能在算法层面防止破解,但是还是防不了直接修改程序。

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

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

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

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

© 2021 V2EX