吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 1347|回复: 16
收起左侧

[讨论] 如何解决易语言的千年虫问题

  [复制链接]
烟99 发表于 2023-8-3 10:57
最近,在研究基于易语言的编写的卡密管理系统,其中一个环节就是根据注册码和机器码的特征经过预先设置好的算法来计算授权码,但是授权不可能让你用一辈子,总得有个时间限制吧。
于是我准备在授权码加入时间验证,我的思路是引入一个可以提供北京时间的API接口,然后通过JSON来解析现在的北京时间是unix时间戳,再将授权码里记载的加密信息还原成unix时间戳,两者比对,若授权码里的unix时间戳小于JSON读取到的时间戳则判定为授权过期,软件再次回到未注册状态。
但是易语言是32位架构,无论用什么方法来转换时间,只要时间晚于2038年1月19日03:14:07,也就是unix时间戳大于2147483647的时候,都会回到1900年,unix时间戳也会因结果溢出而变为负数,这种情况就是常提到的千年虫问题。
有大佬知道怎样解决。

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

yk2014 发表于 2023-8-3 11:11
手动解析那个时间戳字符串,带毫秒的时间戳也就13位字符,9999年也就15位字符,所以可以这样:把后8位字符转换成整数2,剩下的字符转换成整数1;每个时间戳都照这样转换;要比较的时候,先比较整数1,如果整数1相等,再比较整数2
涛之雨 发表于 2023-8-3 11:12
类似于这样?
https://e.125.la/fun-1713.html

点评

这个我查到过,但是不知道转成64位后如何还原成日期  详情 回复 发表于 2023-8-3 11:15
 楼主| 烟99 发表于 2023-8-3 11:14
做个补充
比如这个函数
IMG_20230803_110749.jpg

我在调用的时候在参数里填写2038年1月19日03:14:10,最后返回结果本应是2147483649,但由于千年虫的问题导致返回结果为-2147483646
这种问题有没有解决方法,总不能再要求作者吴涛出个64位的易语言吧
 楼主| 烟99 发表于 2023-8-3 11:15
涛之雨 发表于 2023-8-3 11:12
类似于这样?
https://e.125.la/fun-1713.html

这个我查到过,但是不知道转成64位后如何还原成日期
BLUE7777777 发表于 2023-8-3 11:15
如果只能使用32位时间戳,那么可以使用无符号整型来存储时间戳。这个错误会被延后到2106年。
又或者更换64位。
你好,再见 发表于 2023-8-3 11:39
烟99 发表于 2023-8-3 11:14
做个补充
比如这个函数

易语言支持库很旧了,应该是增减时间这个命令使用整数型变量导致溢出
用精易模块就好啦

屏幕截图 2023-08-03 113640.png
屏幕截图 2023-08-03 113854.png
a952135763 发表于 2023-8-3 11:39
用长整数 64位的
自己写个时间转换函数
很简单的
你把时间单位分割一下 一个一个相减 后乘以你要转换的单位  然后全部加起来不就行了?
woflant 发表于 2023-8-3 11:40
易语言不太懂,这样好像可以转过来

易语言时间戳转换.png
 楼主| 烟99 发表于 2023-8-3 11:51
@你好,再见 @woflant 不考虑精益模块,因为精益模块极易误报,但是可以考虑把精益模块相关函数的源码放到程序中
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 19:50

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表