簽名認證是對非對稱加密技術與數字摘要技術的綜合運用,指的是將通信內容的摘要信息使用發送者的私鑰進行加密,然后將密文與原文一起傳輸給信息的接受者,接收者通過發送者的公鑰解密被加密的摘要信息,然后使用與發送者項目的摘要算法,對接收到的內容采用相同的方式產生摘要串,與解密的摘要串進行對比,如果相同,則說明接收到的內容是完整的,在傳輸過程中沒有受到第三方篡改,否則說明通信內容已被第三方篡改。
通過前面對非對稱加密算法的介紹,我們可以得知,每個人都有其持有的私鑰,且都是對外界保密的,而通過私鑰加密的信息,只能通過其對應的公鑰才能解密。因此,私鑰可以代表私鑰持有者的身份,可以通過私鑰對應的公鑰來對私鑰擁有者身份進行校驗。通過數字簽名,能夠確認信息是由信息發送方簽名并發送出來的,因此其他人根本假冒不來消息發送方的簽名,他們沒有消息發送者的私鑰,如果傳輸內容在中途被篡改,對應的數字簽名的值也將發生改變。
只有信息的發送者才能產生別人無法偽造的數字簽名串,這個串能對信息發送者發送的內容完整性和發送者的身份校驗和鑒別,如圖:
參考國外一篇文章: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 算法表示采用 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
首先我們看看最簡單的實現方法,需要達到這樣的目的。
輸入一串數字或者字符串,最后返回格式化后的字符串,每隔3位用逗號分隔,通過四舍五入保留小數點后2兩位。
我們來分析下方法的實現過程。
替換掉原本傳入數據中可能出現的'$'和',',然后判斷是否為數字。
判斷傳入的數字是正數還是負數。
判斷小數位數的舍入性。
每隔三位,添加一個逗號。
重新拼接字符串,正負號+整數位+小數點+小數位
根據上述的分析過程,得到的代碼如下。
方法1
第二種實現方法可以選擇保留小數位數,它的做法如下。
將傳入的數字或者字符串轉化為float類型數據,并進行四舍五入
用小數點進行分割,并將整數位逆序
對于整數位,每隔三位添加一個逗號
再次進行逆序,得到正確的整數位后拼接小數位。
通過上述的分析,得到代碼如下。
方法2
方法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實現以及后面推薦的幾個開源類庫,希望能對大家有幫助。
*請認真填寫需求信息,我們會在24小時內與您取得聯系。