Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
簽名認(rèn)證是對非對稱加密技術(shù)與數(shù)字摘要技術(shù)的綜合運(yùn)用,指的是將通信內(nèi)容的摘要信息使用發(fā)送者的私鑰進(jìn)行加密,然后將密文與原文一起傳輸給信息的接受者,接收者通過發(fā)送者的公鑰解密被加密的摘要信息,然后使用與發(fā)送者項(xiàng)目的摘要算法,對接收到的內(nèi)容采用相同的方式產(chǎn)生摘要串,與解密的摘要串進(jìn)行對比,如果相同,則說明接收到的內(nèi)容是完整的,在傳輸過程中沒有受到第三方篡改,否則說明通信內(nèi)容已被第三方篡改。
通過前面對非對稱加密算法的介紹,我們可以得知,每個(gè)人都有其持有的私鑰,且都是對外界保密的,而通過私鑰加密的信息,只能通過其對應(yīng)的公鑰才能解密。因此,私鑰可以代表私鑰持有者的身份,可以通過私鑰對應(yīng)的公鑰來對私鑰擁有者身份進(jìn)行校驗(yàn)。通過數(shù)字簽名,能夠確認(rèn)信息是由信息發(fā)送方簽名并發(fā)送出來的,因此其他人根本假冒不來消息發(fā)送方的簽名,他們沒有消息發(fā)送者的私鑰,如果傳輸內(nèi)容在中途被篡改,對應(yīng)的數(shù)字簽名的值也將發(fā)生改變。
只有信息的發(fā)送者才能產(chǎn)生別人無法偽造的數(shù)字簽名串,這個(gè)串能對信息發(fā)送者發(fā)送的內(nèi)容完整性和發(fā)送者的身份校驗(yàn)和鑒別,如圖:
參考國外一篇文章:http://www.youdzone.com/signature.html
數(shù)字簽名是一種將現(xiàn)實(shí)世界中的蓋章、簽字的功能,在計(jì)算機(jī)世界中進(jìn)行實(shí)現(xiàn)的技術(shù)。使用數(shù)字簽名可以識別篡改、偽造、防止抵賴否則。 主要三個(gè)要點(diǎn):
(1) 防止消息篡改,解決完整性問題
(2) 防止消息偽造,解決鑒權(quán)問題
(3) 防止抵賴否認(rèn),解決否認(rèn)問題
數(shù)字簽名也是一種可以證明我就是我的技術(shù)
一般來說,不直接對消息進(jìn)行簽名,而是對消息的哈希值進(jìn)行簽名。 生成步驟:
(1)對消息進(jìn)行哈希計(jì)算,得到哈希值
(2)利用私鑰對哈希值進(jìn)行加密,生成簽名
(3)將簽名附加在消息后面,一起發(fā)送過去
(1)收到消息后,提取消息中的簽名
(2)用公鑰對簽名進(jìn)行解密,得到哈希值1。
(3)對消息中的正文進(jìn)行哈希計(jì)算,得到哈希值2。
(4)比較哈希值1和哈希值2,如果相同,則驗(yàn)證成功。
(1) MD5withRSA 數(shù)字簽名
(2)SHA1withRSA
很容易理解,MD5withRSA 算法表示采用 MD5 算法 生成需要發(fā)送正文的數(shù)字簽名,并使用RSA 算法來對正文進(jìn)行加密和解密。
MD5withRSA 算法實(shí)現(xiàn):
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;
}
/**
* 驗(yàn)簽
*/
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算法而已。
里只會(huì)介紹一些常用的標(biāo)簽:
h標(biāo)簽 h標(biāo)簽是一個(gè)標(biāo)題標(biāo)簽 h1 h2 h3 h4 h5 h6 h1最大以此類推 h6最小
它的特點(diǎn)就是加粗 獨(dú)自一行
就是一個(gè)文章的內(nèi)容的標(biāo)題
代碼
圖1
圖2
圖1中的HTML中的各種標(biāo)簽是標(biāo)題 數(shù)字是內(nèi)容
圖2河南省應(yīng)急管理廳:洪澇災(zāi)害已致33人遇難8人失蹤是標(biāo)題 下邊是內(nèi)容
p標(biāo)簽是段落標(biāo)簽,一個(gè)p標(biāo)簽就是一段話。
可以看到這些字都是用p標(biāo)簽包著的。p標(biāo)簽可以用來寫多個(gè)段落的文章。
接下來就是img標(biāo)簽 img標(biāo)簽就是用來插入圖像的
代碼
圖3
src是寫圖片的地址或者url(地址)
alt屬性保證那些文字確實(shí)為那些看不到圖像的人提供了說明信息 作用就是圖片如果顯示不出來的話你在alt里邊填寫的文字就會(huì)顯示出來。
沒出來的圖
接下來就是超鏈接標(biāo)簽也是最神奇的一個(gè)標(biāo)簽
a標(biāo)簽就是超鏈接標(biāo)簽 它可以從一個(gè)網(wǎng)站點(diǎn)擊一個(gè)按鈕或者一個(gè)文字跳轉(zhuǎn)到你連接的網(wǎng)站
href里邊是寫你要跳轉(zhuǎn)的地址或者別的路徑后邊括號里是寫你要顯示的文字
例子:
代碼
運(yùn)行
跳轉(zhuǎn)
以上就是HTML中個(gè)別標(biāo)簽的介紹和使用方法,如果有其他想了解的可以評論留言。
最近幾天河南暴雨頻發(fā),祝河南的人民挺過難關(guān),加油!災(zāi)難無情人有情。
在前端開發(fā)中經(jīng)常會(huì)遇到這樣一種需求,使用Javascript格式化數(shù)字進(jìn)行輸出。最常見的是金額,比如人民幣最小表示單位為分,一般需要精確到小數(shù)點(diǎn)后兩位數(shù)字,而且整數(shù)位每隔三位數(shù)字需要用逗號隔開。
今天我們就一起來看看如何使用原生Javascript和開源類庫來實(shí)現(xiàn)這樣一種功能吧。
感興趣的可以自行去github上去看源碼,github地址為:
https://github.com/zhouxiongking/article-pages/blob/master/articles/formatNumber/formatNumber.js
Javascript
首先我們看看最簡單的實(shí)現(xiàn)方法,需要達(dá)到這樣的目的。
輸入一串?dāng)?shù)字或者字符串,最后返回格式化后的字符串,每隔3位用逗號分隔,通過四舍五入保留小數(shù)點(diǎn)后2兩位。
我們來分析下方法的實(shí)現(xiàn)過程。
替換掉原本傳入數(shù)據(jù)中可能出現(xiàn)的'$'和',',然后判斷是否為數(shù)字。
判斷傳入的數(shù)字是正數(shù)還是負(fù)數(shù)。
判斷小數(shù)位數(shù)的舍入性。
每隔三位,添加一個(gè)逗號。
重新拼接字符串,正負(fù)號+整數(shù)位+小數(shù)點(diǎn)+小數(shù)位
根據(jù)上述的分析過程,得到的代碼如下。
方法1
第二種實(shí)現(xiàn)方法可以選擇保留小數(shù)位數(shù),它的做法如下。
將傳入的數(shù)字或者字符串轉(zhuǎn)化為float類型數(shù)據(jù),并進(jìn)行四舍五入
用小數(shù)點(diǎn)進(jìn)行分割,并將整數(shù)位逆序
對于整數(shù)位,每隔三位添加一個(gè)逗號
再次進(jìn)行逆序,得到正確的整數(shù)位后拼接小數(shù)位。
通過上述的分析,得到代碼如下。
方法2
方法3中,是一個(gè)最全面的實(shí)現(xiàn),可以選擇向上,向下或者四舍五入來保留小數(shù)位數(shù);同時(shí)可以選擇小數(shù)點(diǎn)符號和千分位符號。
為了讓方法的代碼看起來更清晰,將方法拆分成兩個(gè)function,每個(gè)function實(shí)現(xiàn)自己的功能。
第一個(gè)function作為入口函數(shù),主要包含小數(shù)位的處理,千分位符號位的處理,以及最后返回結(jié)果的處理。
主function
第二個(gè)function的主要功能是根據(jù)傳入的參數(shù)對數(shù)字進(jìn)行取整或者四舍五入。
第二個(gè)function
針對以上的方法,我們可以通過代碼測試。
測試結(jié)果
在這里也推薦兩款非常好用的用于格式化數(shù)字的開源庫Numeral.js和accounting.js,兩者都可以格式化貨幣,百分比,時(shí)間,幾個(gè)小數(shù)位數(shù),千分位等等
Numeral.js的github地址為:
https://github.com/adamwdraper/Numeral-js
目前在Github上超過5K的star,而且呈現(xiàn)增長的趨勢。
accounting.js的github地址為:
https://github.com/openexchangerates/accounting.js
目前在github上有超過3K的star,可以說是非常受歡迎。
這里簡要介紹下Numeral.js的用法。
使用
在瀏覽器中使用,可以通過以下代碼去實(shí)現(xiàn)。
使用
格式化
通過給numeral傳遞數(shù)字,然后通過format方法進(jìn)行數(shù)字的格式化。
格式化數(shù)字
數(shù)字格式化的規(guī)則如下。
數(shù)字格式化規(guī)則
其他的類似于貨幣,字節(jié),百分?jǐn)?shù),時(shí)間,科學(xué)計(jì)數(shù)等的格式化規(guī)則大家可以去官網(wǎng)看看。
今天這篇文章主要講解了如何格式化數(shù)字成指定的格式,包括原生JS實(shí)現(xiàn)以及后面推薦的幾個(gè)開源類庫,希望能對大家有幫助。
*請認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。