整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

安全架构进阶五之数字签名

安全架构进阶五之数字签名

字签名

签名认证是对非对称加密技术与数字摘要技术的综合运用,指的是将通信内容的摘要信息使用发送者的私钥进行加密,然后将密文与原文一起传输给信息的接受者,接收者通过发送者的公钥解密被加密的摘要信息,然后使用与发送者项目的摘要算法,对接收到的内容采用相同的方式产生摘要串,与解密的摘要串进行对比,如果相同,则说明接收到的内容是完整的,在传输过程中没有受到第三方篡改,否则说明通信内容已被第三方篡改。

通过前面对非对称加密算法的介绍,我们可以得知,每个人都有其持有的私钥,且都是对外界保密的,而通过私钥加密的信息,只能通过其对应的公钥才能解密。因此,私钥可以代表私钥持有者的身份,可以通过私钥对应的公钥来对私钥拥有者身份进行校验。通过数字签名,能够确认信息是由信息发送方签名并发送出来的,因此其他人根本假冒不来消息发送方的签名,他们没有消息发送者的私钥,如果传输内容在中途被篡改,对应的数字签名的值也将发生改变。

只有信息的发送者才能产生别人无法伪造的数字签名串,这个串能对信息发送者发送的内容完整性和发送者的身份校验和鉴别,如图:

参考国外一篇文章:http://www.youdzone.com/signature.html

数字签名功能

数字签名是一种将现实世界中的盖章、签字的功能,在计算机世界中进行实现的技术。使用数字签名可以识别篡改、伪造、防止抵赖否则。 主要三个要点:

(1) 防止消息篡改,解决完整性问题

(2) 防止消息伪造,解决鉴权问题

(3) 防止抵赖否认,解决否认问题

数字签名也是一种可以证明我就是我的技术

生成签名

一般来说,不直接对消息进行签名,而是对消息的哈希值进行签名。 生成步骤:

(1)对消息进行哈希计算,得到哈希值

(2)利用私钥对哈希值进行加密,生成签名

(3)将签名附加在消息后面,一起发送过去

验证签名

(1)收到消息后,提取消息中的签名

(2)用公钥对签名进行解密,得到哈希值1。

(3)对消息中的正文进行哈希计算,得到哈希值2。

(4)比较哈希值1和哈希值2,如果相同,则验证成功。

常见的数字签名

(1) MD5withRSA 数字签名

(2)SHA1withRSA

MD5withRSA

很容易理解,MD5withRSA 算法表示采用 MD5 算法 生成需要发送正文的数字签名,并使用RSA 算法来对正文进行加密和解密。

MD5withRSA 算法实现:

public class MD5withRSA {

    /**
     * 生成摘要
     */
    public static byte[] sign(byte[] content, PrivateKey privateKey) throws Exception {
        MessageDigest md=MessageDigest.getInstance("MD5");
        byte[] bytes=md.digest(content);
        Cipher cipher=Cipher.getInstance("RSA");
        cipher.init(Cipher.ENCRYPT_MODE, privateKey);
        byte[] encryptBytes=cipher.doFinal(bytes);

        return encryptBytes;
    }

    /**
     * 验签
     */
    public static boolean verify(byte[] content, byte[] sign, PublicKey publicKey) throws Exception {
        MessageDigest md=MessageDigest.getInstance("MD5");
        byte[] bytes=md.digest(content);
        Cipher cipher=Cipher.getInstance("RSA");
        cipher.init(Cipher.DECRYPT_MODE, publicKey);

        byte[] decryptBytes=cipher.doFinal(bytes);

        BASE64Encoder base64Encoder=new BASE64Encoder();

       return base64Encoder.encode(decryptBytes).equals(base64Encoder.encode(sign));
    }
}

SHA1withRSA 算法的流程与 MD5withRSA算法的流程完全一致,只是签名算法换成了SHA-1算法而已。

里只会介绍一些常用的标签:

h标签 h标签是一个标题标签 h1 h2 h3 h4 h5 h6 h1最大以此类推 h6最小

它的特点就是加粗 独自一行

就是一个文章的内容的标题



代码


图1


图2

图1中的HTML中的各种标签是标题 数字是内容

图2河南省应急管理厅:洪涝灾害已致33人遇难8人失踪是标题 下边是内容

p标签是段落标签,一个p标签就是一段话。


可以看到这些字都是用p标签包着的。p标签可以用来写多个段落的文章。

接下来就是img标签 img标签就是用来插入图像的



代码

图3

src是写图片的地址或者url(地址)


alt属性保证那些文字确实为那些看不到图像的人提供了说明信息 作用就是图片如果显示不出来的话你在alt里边填写的文字就会显示出来。


没出来的图

接下来就是超链接标签也是最神奇的一个标签

a标签就是超链接标签 它可以从一个网站点击一个按钮或者一个文字跳转到你连接的网站

href里边是写你要跳转的地址或者别的路径后边括号里是写你要显示的文字

例子:


代码



运行


跳转

以上就是HTML中个别标签的介绍和使用方法,如果有其他想了解的可以评论留言。


最近几天河南暴雨频发,祝河南的人民挺过难关,加油!灾难无情人有情。

在前端开发中经常会遇到这样一种需求,使用Javascript格式化数字进行输出。最常见的是金额,比如人民币最小表示单位为分,一般需要精确到小数点后两位数字,而且整数位每隔三位数字需要用逗号隔开。

今天我们就一起来看看如何使用原生Javascript和开源类库来实现这样一种功能吧。

感兴趣的可以自行去github上去看源码,github地址为:

https://github.com/zhouxiongking/article-pages/blob/master/articles/formatNumber/formatNumber.js

Javascript

原生JS实现方法1

首先我们看看最简单的实现方法,需要达到这样的目的。

输入一串数字或者字符串,最后返回格式化后的字符串,每隔3位用逗号分隔,通过四舍五入保留小数点后2两位。

我们来分析下方法的实现过程。

  1. 替换掉原本传入数据中可能出现的'$'和',',然后判断是否为数字。

  2. 判断传入的数字是正数还是负数。

  3. 判断小数位数的舍入性。

  4. 每隔三位,添加一个逗号。

  5. 重新拼接字符串,正负号+整数位+小数点+小数位

根据上述的分析过程,得到的代码如下。

方法1

原生JS实现方法2

第二种实现方法可以选择保留小数位数,它的做法如下。

  1. 将传入的数字或者字符串转化为float类型数据,并进行四舍五入

  2. 用小数点进行分割,并将整数位逆序

  3. 对于整数位,每隔三位添加一个逗号

  4. 再次进行逆序,得到正确的整数位后拼接小数位。

通过上述的分析,得到代码如下。

方法2

原生JS实现方法3

方法3中,是一个最全面的实现,可以选择向上,向下或者四舍五入来保留小数位数;同时可以选择小数点符号和千分位符号。

为了让方法的代码看起来更清晰,将方法拆分成两个function,每个function实现自己的功能。

第一个function作为入口函数,主要包含小数位的处理,千分位符号位的处理,以及最后返回结果的处理。

主function

第二个function的主要功能是根据传入的参数对数字进行取整或者四舍五入。

第二个function

针对以上的方法,我们可以通过代码测试。

测试结果

开源库

在这里也推荐两款非常好用的用于格式化数字的开源库Numeral.js和accounting.js,两者都可以格式化货币,百分比,时间,几个小数位数,千分位等等

Numeral.js的github地址为:

https://github.com/adamwdraper/Numeral-js

目前在Github上超过5K的star,而且呈现增长的趋势。

accounting.js的github地址为:

https://github.com/openexchangerates/accounting.js

目前在github上有超过3K的star,可以说是非常受欢迎。

这里简要介绍下Numeral.js的用法。

  • 使用

在浏览器中使用,可以通过以下代码去实现。

使用

  • 格式化

通过给numeral传递数字,然后通过format方法进行数字的格式化。

格式化数字

数字格式化的规则如下。

数字格式化规则

其他的类似于货币,字节,百分数,时间,科学计数等的格式化规则大家可以去官网看看。

结束语

今天这篇文章主要讲解了如何格式化数字成指定的格式,包括原生JS实现以及后面推荐的几个开源类库,希望能对大家有帮助。