时间戳知识点

文章目录

  • 一,什么是时间戳
  • 二,时间戳的分类
    • 1、自建时间戳:
    • 2、具有法律的效力的时间戳:
  • 三,时间戳的组成部分
  • 四,时间戳的作用
    • 防篡改:
    • 防复用:
      • 时间戳在JavaScript中
      • 时间戳在mysql中
    • 时间戳实际用途
    • WoSign 时间戳服务
  • 五,时间戳转换/应用工具



一,什么是时间戳

“时间戳是指格林威治时间1970年01月01日00时00分00秒(北京时间1970年01月01日08时00分00秒)起至现在的总秒数。通俗的讲, 时间戳是一份能够表示一份数据在一个特定时间点已经存在的完整的可验证的数据。

二,时间戳的分类

1、自建时间戳:

此类时间戳是通过时间接收设备(如GPS,CDMA,北斗卫星)来获取时间到时间戳服务器上,并通过时间戳服务器签发时间戳证书。此种时间戳可用来企业内部责任认定,在法庭认证是并不具备法律效力。因其在通过时间接收设备接收时间存在被篡改的可能,故此不能作为法律依据。

2、具有法律的效力的时间戳:

它是由我国中科院国家授时中心与北京联合信任技术服务有限公司负责建设的我国第三方可信时间戳认证服务。由国家授时中心负责时间的授时与守时检测,因其守时监测功能而保障时间错证书中的时间的正确性和不被篡改。获取时间戳平台有“大众版权保护平台”,可与我国中科院授时中心时间同步。

三,时间戳的组成部分

时间戳(time-stamp)是一个经加密后形成的凭证文档,它包括三个部分:

1、需加时间戳的文件的摘要(digest)

2、DTS收到文件的日期和时间

3、DTS的数字签名
一般来说,时间戳产生的过程为:用户首先将需要加时间的文件用Hash编码加密形成摘要,然后将该摘要发送到DTS,DTS在加入了收到文件摘要的日期和时间信息后再对该文件加密(数字签名),然后送回用户。
书面签署文件的时间是由签署人知己写上的,而数字时间戳则不然,它是有认证单位DTS来加的,以DTS收到文件的时间为依据。

四,时间戳的作用

客户端在向服务端接口进行请求,如果请求信息进行了加密处理,被第三方截取到请求包,可以使用该请求包进行重复请求操作。如果服务端不进行防重放攻击,就会服务器压力增大,而使用时间戳的方式可以解决这一问题。

防篡改:

一般使用的方式就是把参数拼接,当前项目AppKey,双方约定的“密钥”,加入到Dictionary字典集中,按ABCD顺序进行排序,最后在MD5+加密.客户端将加密字符串和请求参数一起发送给服务器。服务器按照上述规则拼接加密后,与传入过来的加密字符串比较是否相等

在当今社会,不论是计算机或是手机,或者其他任何电子设备,都可以通过修改它显示的时间,“穿越”到过去,或者“穿梭”到未来,我们也可以通过各种软件来修改图片或者视频等等。因此,在网络上,关于时间的信息似乎失去意义,因为几乎任何人都可以修改它。
不过,在区块链中,时间戳永远不会撒谎,因为区块链过去的部分是不能以任何方式进行修改的。而且时间戳是区块链区块包含特定信息的一个过程,它永远存在。

防复用:

上面的方式进行加密,就无法解决防复用的问题,这时需要在客户端和服务端分别生成UTC的时间戳,这个UTC是防止你的客户端与服务端不在同一个时区,呵呵,然后把时间戳timestamp拼在密文里就可以了,至于防复用的有效性。 时间戳有什么用?.

时间戳在JavaScript中

获取当前的时间戳:

let timestamp= Math.round(new Date() / 1000) //这个只精确到了秒

var timestamp=new Date().getTime(); //这个精确到了毫秒

判断超出多久的时间

const now = Date.now()
const d = new Date(time) //time为时间戳

const secDiff = (now - d) / 1000
return secDiff > 0.5 * 60 * 60 过了半小时

时间戳的转换:

格式:2019/5/25 下午2:04

let aa = new Date(parseInt(a) * 1000).toLocaleString().replace(/:\d{1,2}$/, ’ ');

tip:时间戳之间每个小时是相差3600的,可以对其进行相应的操作

时间戳转时间的封装:

 
//formatTime(timestamp,"Y.M.D h:m")  参数传入相应的时间戳,和想要的时间格式的组合即可。
function formatTime(number,format) {  
  var formateArr  = ['Y','M','D','h','m','s'];  
  var returnArr   = [];  
  var date = new Date(number * 1000);  
  returnArr.push(date.getFullYear());  
  returnArr.push(formatNumber(date.getMonth() + 1));  
  returnArr.push(formatNumber(date.getDate()));  
  returnArr.push(formatNumber(date.getHours()));  
  returnArr.push(formatNumber(date.getMinutes()));  
  returnArr.push(formatNumber(date.getSeconds()));  
  for (var i in returnArr)  
  {  
    format = format.replace(formateArr[i], returnArr[i]);  
  }  
  return format;  
}
 
//数据转化  
function formatNumber(n) {  
  n = n.toString()  
  return n[1] ? n : '0' + n  
}
 
module.exports={
  formatTime
}

日期转时间戳:

 transdate(time){   //2019/11/2 11:29:13
				     var date =  new Date(time); 
				        var time_str = date.getTime().toString();
				        return time_str.substr(0, 10);
				}

版权声明:本节为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。时间戳的转换.

时间戳在mysql中

很多时候我们在MySQL中存储时间,并不是直接存储成为date类型,或者是time类型的,而是存储一串数据,这个数据表示你存储的时间距离1970年1月1日00:00:00所隔的秒数,这个转换是通过数据库系统的转换时间的函数完成,所以无论我们是输入时间1980-1-2 12:3:30还是直接输入距离时间秒都是可以存储的时候都是用一串数字存储,时间格式的数据和数字之间就需要来回的转换
函数unix_timestamp()是将时间格式的数据转换成一个长整型的数据
函数from_unixtime()是将长整形的数据转换成为时间戳

时间转时间戳
create table test (dt datetime,dts bigint);
insert into test select now(),unix_timestamp(now());
select * from test;
时间戳转时间
create table test (dt datetime,dts bigint);
insert into test select now(),unix_timestamp(now());
select *,from_unixtime(dts) from test;

时间转字符串
select date_format(now(), ‘%Y-%m-%d’);
时间转时间戳
select unix_timestamp(now());
字符串转时间
select str_to_date(‘2016-01-02’, ‘%Y-%m-%d %H’);
字符串转时间戳
select unix_timestamp(‘2016-01-02’);
时间戳转字符串
select from_unixtime(1451997924,’%Y-%d’);
时间戳转时间
select from_unixtime(列名) from 表名;

时间戳字段进行统一的更新,如增加1天或减少1天,可使用timestampadd这个函数
update a set created = UNIX_TIMESTAMP(timestampadd(day, 1, from_unixtime(created)))
上面的sql语句就是把a表的created时间戳字段统一增加1天,减少1天填写-1即可

随机函数:rand()
select rand(),可以看到结果会是随机小数
取随机整数  
  方法1
  A:select floor(rand()*N) —生成的数是这样的:12.0
  B:select cast( floor(rand()*N) as int) —生成的数是这样的:12   
  方法2
  A:select ceiling(rand() * N) —生成的数是这样的:12.0
  B:select cast(ceiling(rand() * N) as int) —生成的数是这样的:12   
  其中里面的N是一个你指定的整数,如100,可以看出,两种方法的A方法是带有.0这个的小数的,而B方法就是真正的整数了。
区别:他们的生成随机数的范围:
  方法1的数字范围:0至N-1之间,如cast( floor(rand()*100) as int)就会生成0至99之间任一整数
  方法2的数字范围:1至N之间,如cast(ceiling(rand() * 100) as int)就会生成1至100之间任一整数
  
版权声明:本节为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 时间戳.

时间戳实际用途

为了实现跨平台在应用系统中记录时间的时候我们也可以使用记录时间戳的方法做到跨平台性。
好多Linux + Apache的服务器都会对CSS、JS和图片这些静态的内容设置缓存,到了IE这里又会在本地做一个缓存。所以当我们更新了CSS文件之后,常常会出现客户端没有更新,导致显示出现问题,所以使用了时间戳。总之一句话概括使用时间戳的目的就是:禁止缓存css、js,使浏览器同步更新到服务器端最新的静态内容。

WoSign 时间戳服务

WoSign 时间戳服务
对于成功的电子商务应用,要求参与交易各方不能否认其行为。这其中需要在经过数字签名的交易上打上一个可信赖的时间戳,从而解决一系列的实际和法律问题。由于用户桌面时间很容易改变,由该时间产生的时间戳不可信赖,因此需要一个权威第三方来提供可信赖的且不可抵赖的时间戳服务。

WoSign 作为一个权威的、可信赖的、公正的第三方数字证书颁发机构,其时间戳服务就是将经过时间戳服务器签名的一个可信赖的日期和时间与特定电子数据绑定在一起,为服务器端和客户端应用提供可信的时间证明。 其工作原理示意图如下图1所示:
时间戳知识点_第1张图片
时间戳服务工作流程:
1,用户对文件数据进行Hash摘要处理;
2,用户提出时间戳的请求,Hash值被传递给时间戳服务器;
3,时间戳服务器对哈希值和一个日期/时间记录进行签名,生成时间戳;
4,时间戳数据和文件信息绑定后返还,用户进行下一步电子交易操作。
当您使用WoSign的微软代码签名证书对电脑文件进行数字签名时,会提示您添加WoSign免费提供的时间戳URL,WoSign的时间戳服务器会反签名附上签名时间(请注意:不是您的电脑时间,是WoSign时间戳服务器上的格林威治标准时间换算成您电脑设置的时区的当地时间)。

您可以右击查看已经签名的文件属性,如下图 2 所示,与其他电脑文件不同的是,属性中增加了“数字签名”属性,显示了签名人姓名、电子邮件和签名时间戳,点击详细信息:
时间戳知识点_第2张图片
WoSign时间戳不仅可以查看签名人的签名证书所有信息,还可以查看反签名人信息,也就是时间戳服务签名信息以及反签名证书信息,反签名人:WoSign Time Stamping Signer。这样,用户才会确信此文件确实是来自签名人和签名时的时间,因为签名人的真实身份是通过权威的第三方 WoSign 认证的。摘自这

五,时间戳转换/应用工具

自搜索:时间戳
在线工具链接: https://tool.lu/timestamp/.

Unix时间戳在线工具链接: https://tool.chinaz.com/Tools/unixtime.aspx.

你可能感兴趣的:(常识,数据库,java,区块链)