我在向页面发送 http 请求时遇到问题。从我在网站上填写的表格传输的数据,我无法解密。 时间和日期用 7 个符号进行编码。这里有大写、小写字母、数字和一些特殊字符,例如下划线。
字符串是连续的,当我有一分钟的时间可以更改最后 3 个字符时。但例如,数字2尚未存入相同的字母等。
很抱歉我没有例子。我只是在家,我想要访问的服务器在我的工作上。
来自德国的许多问候,并非常感谢您的帮助!
以下是示例。
URK4AgA 时间为 2014 年 2 月 19 日 17:00
URAk1AA 时间为 2014 年 2 月 17 日 17:00
URKOzyA 时间为 2014 年 2 月 19 日 14:00
UGDVrYA 时间为 2013 年 10 月 4 日 14:00
抱歉我的英语不好......
最佳答案
这是自 Unix epoch 以来以 64 为基数的毫秒单位计数。让它更令人困惑的是(1)你的例子中的时间与那个时间有一个小时的偏移,我假设是德国时间; (2) 其中一个有年份错误(2012年应该是2013年); (3) 其中之一也有夏令时。除此之外,它确实有效。
最常见的 64 位字母表使用 A-Z
、a-z
、0-9
以及 +
和 /
。但是,您说某些时间戳包含下划线,因此我假设它是使用 -
和 _
作为最后两个字符的变体 Base 64 字母表。但还有其他变体,因此如果没有更多示例,就不可能确定字母表。
您还没有说明您实际使用的是哪种语言,但这里有用于编码和解码这些时间戳的 Java 方法,这些方法将它们与 Java Date 对象相互转换。 (如果需要,您可以轻松地将其更改为使用纯整数时间戳。)
private static final String timestampAlphabet =
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
public static String encodeTimestamp(Date date) {
long t = date.getTime();
StringBuilder timestamp = new StringBuilder();
do {
timestamp.append(timestampAlphabet.charAt((int)(t % 64)));
} while ((t /= 64) != 0);
return timestamp.reverse().toString();
}
public static Date decodeTimestamp(String timestamp) {
long t = 0;
for (char c : timestamp.toCharArray()) {
t = t * 64 + timestampAlphabet.indexOf(c);
}
return new Date(t);
}
以下是 JavaScript 中的相同函数,它们与 JavaScript Date 对象相互转换:
var timestampAlphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_";
function encodeTimestamp(date) {
var t = date.getTime();
var timestamp = "";
do {
timestamp = timestampAlphabet[t % 64] + timestamp;
} while (t = Math.floor(t / 64));
return timestamp;
}
function decodeTimestamp(timestamp) {
var t = 0;
for (var i = 0; i < timestamp.length; i++) {
t = t * 64 + timestampAlphabet.indexOf(timestamp.charAt(i));
}
return new Date(t);
}
编辑:这是 VBA。别再打扰我了。
Private Const TimestampAlphabet As String = _
"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789-_"
Public Static Function EncodeTimestamp(ByVal d As Date) As String
Dim t As Variant
t = (CDec(d) - 25569) * 86400000
Do
EncodeTimestamp = Mid(TimestampAlphabet, 1 + t - (64 * Fix(t / 64)), 1) + EncodeTimestamp
t = Fix(t / 64)
Loop While t > 0
End Function
Public Static Function DecodeTimestamp(ByVal timestamp As String) As Date
Dim t As Variant, i As Integer
t = CDec(0)
For i = 1 To Len(timestamp)
t = t * 64 + InStr(TimestampAlphabet, Mid(timestamp, i, 1)) - 1
Next
DecodeTimestamp = CDate(CDbl((t / 86400000) + 25569))
End Function
关于java - 需要帮助破译 http 请求中基于 java 的时间格式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21872968/