文章辅助
英国二战时期的计算机巨人
ENIAC进行对数据加密,英国二战时期的计算机巨人(Colossus computer即第一部全然电子化的电脑器件)
在电机设计的炸弹机(Bombe)协助下,德军的恩尼格玛密码机大受威胁,bomber会试着破解ENIAC加密过的数据
炸弹机是艾伦·图灵与高登·威奇曼(Gordon Welchman)仿造1938年的波兰解密机炸弹机(Bomba)所设计,运用一连串的电子逻辑演绎器件找出可能是恩尼格玛密码机的密码,如下图所示。(碰撞)
32位整型数字为什么只能记录两年多
一年有多少秒?
大多数年份的秒数计算:每天的小时数乘以每小时的分钟数乘以每分钟的秒数乘以一年中的天数:
$ expr 24 \* 60 \* 60 \* 365
31536000
闰年需再增加一天:
$ expr 24 \* 60 \* 60 \* 366
31622400
注: Unix时间将一天精确定义为 24 * 60 * 60 = 86400 秒,忽略闰秒
# Unix时间
Unix(包括 Linux)系统将日期/时间值存储为自 1970-01-01 00:00:00 UTC 以来经过的秒数(32位整型)。要确定自该时间以来经过了多少秒钟,查看Unix时间值:
$ date +%s
1576883876
%s 参数告诉 date 命令将当前日期/时间显示为自 1970-01-01 开始以来的秒数
# Unix 系统可以管理多少时间
了解 Unix 系统可以容纳多少时间,需要查看32位字段的容量。计算方法:
$ echo '2^32' | bc
4294967296
但由于 Unix 需要容纳负数,因此它会为数字的符号保留一位,从而将其减少为:
$ echo '2^31' | bc
2147483648
并且,由于 Unix 计数以 0 开头,这意味着有 2,147,483,648 个值,但最大的可能值为 2,147,483,647 个。
Unix 日期/时间值不能超过该数字---就像汽车上的里程表可能不能超过 999,999 英里一样。如加1该值就变为了 -2147483648。
注: 在达到最大值之后2038/1/19 03:14:07,下1秒导致符号位变为1,其余 31 位为 0,即 -2147483648,时间变为 1901/12/13 20:45:52,这就是 Y2K38 问题。
在 2038 年之前,Unix 系统不会遇到 Y2K 类型的问题,直到如上所述存储的日期将超过其 32 位空间分配。但这距离现在已经只有 15 年了,内核开发人员已经在研究如何避免灾难
2038 年的问题有时称为 Y2K38 问题。我们必须在 2038年1月19日星期二之前解决这个问题。如果问题到时候仍未解决,则该日期之后的系统可能会认为是1901年。解决该问题的一种方法是切换为日期/时间信息的64位表示形式