c 程式設計細節(四)加密

2021-10-02 06:15:59 字數 3384 閱讀 4221

/// /// md5加密,和動網上的16/32位md5加密結果相同,

/// 使用的utf8編碼

///

/// 待加密字串

/// 16或32值之一,其它則採用.net預設md5加密演算法

/// 加密後的字串

public static string encrypt(string source, int length = 32)//預設引數

break;

case 32:

for (int i = 0; i < 16; i++)

break;

default:

for (int i = 0; i < hashvalue.length; i++)

break;

}return sb.tostring();

}

用途:/// 1 防止被篡改

/// 2 防止明文儲存

/// 3 防止抵賴,數字簽名

//1 防止看到明文

//密碼–md5一下–儲存–登陸的時候–輸入的密碼也md5一下–比對

//md5不能解密?不能解密 網上的解密都是基於樣本比對

//密碼複雜點 加鹽(密碼+ruanmou 再md5)(雙md5)

//檔案摘要,只有相同檔案才能相同的md5

// git/svn:md5比對

//任何資料md5後結果都不一樣,到目前為止還沒碰到 2的128次方

//防抵賴:文章--md5(權威機構)

檔案的md5

/// /// 獲取檔案的md5摘要

///

///

///

public static string abstractfile(string filename)

}/// /// 根據stream獲取檔案摘要

///

///

///

public static string abstractfile(stream stream)

return sb.tostring();

}

對稱:加密解密的金鑰是一樣的,,關鍵點就是儲存藏好金鑰,,但因為需要把密碼傳給解密的一方,所以安全是乙個問題

public class desencrypt

}/// /// des解密

///

///

/// 解密後的結果

public static string decrypt(string encrypttext)}}

其中關於memorystream的講解

/// /// 獲取加密/解密對

/// 給你乙個,是無法推算出另外乙個的

///

/// encrypt decrypt

///

/// encrypt decrypt

public static keyvaluepairgetkeypair()

/// /// 加密:內容+加密key

///

///

/// 加密key

///

public static string encrypt(string content, string encryptkey)

/// /// 解密 內容+解密key

///

///

/// 解密key

///

public static string decrypt(string content, string decryptkey)

/// /// 可以合併在一起的,,每次產生一組新的金鑰

///

///

/// 加密key

/// 解密key

/// 加密後結果

private static string encrypt(string content, out string publickey, out string privatekey)

//加金鑰  解金鑰  鑰匙的功能劃分

//公鑰 私鑰 公開程度劃分

//根據需求 可以交錯的,兩組公鑰金鑰一塊用就可以實現資訊傳輸的完全加密,

數字簽名實際上就是上面非對稱加密時的認證模式,只不過做了一點點的改進,加入了雜湊演算法。大家比較熟悉的雜湊演算法可能就是md5了,很多開源論壇都採用了這個演算法。雜湊演算法有三個特點:一是不可逆的,由結果無法推算出原資料;二是原資料哪怕是一丁點兒的變化,都會使雜湊值產生巨大的變化;三是不論多麼大或者多麼少的資料,總會產生固定長度的雜湊值(常見的為32位64位)。產生的雜湊值通常稱為訊息的摘要(digest)。

傳送方

1.將訊息進行雜湊運算,得到訊息摘要。

2.使用自己的私鑰對訊息摘要加密(認證模式:確保了接收方能夠確認自己)。

3.使用接收方的公鑰對訊息進行加密(加密模式:確保了訊息只能由期望的接收方解密)。

4.傳送訊息和訊息摘要。

接下來我們看一下接收方所執行的步驟:

1.使用傳送方的公鑰對訊息摘要進行解密(確認了訊息是由誰傳送的)。

2.使用自己的私鑰對訊息進行解密(安全地獲得了實際應獲得的資訊)。

3.將訊息進行雜湊運算,獲得訊息摘要。

4.將上一步獲得的訊息摘要 和 第一步解密的訊息摘要進行對比(確認了訊息是否被篡改)。

與數字簽名相關的乙個概念就是證書機制了,證書是用來做什麼呢?在上面的各種模式中,我們一直使用了這樣乙個假設,就是接收方或者傳送方所持有的、對方的公鑰總是正確的(確實是對方公布的)。而實際上除非對方手把手將公鑰交給我們,否則如果不採取措施,雙方在網路中傳遞公鑰時,一樣有可能被篡改。那麼怎樣解決這個問題呢?這時就需要證書機制了:可以引入乙個公正的第三方,當某一方想要發布公鑰時,它將自身的身份資訊及公鑰提交給這個第三方,第三方對其身份進行證實,如果沒有問題,則將其資訊和公鑰打包成為證書(certificate)。而這個公正的第三方,就是常說的證書頒發機構(certificate

authority)。當我們需要獲取公鑰時,只需要獲得其證書,然後從中提取出公鑰就可以了。

ssl的驗證過程如下圖所示(單邊驗證)ssl加http就變成了https

C 程式設計小細節

本文寫給自己看看,記錄一些程式設計中的小細節!1.if 0 a 當我們判斷變數與一常量是否相等時,最好把常量 0 放前面,而不是寫成if a 0 因為如果我們手誤,當判斷語句 寫成了 那麼if 0 a 會直接報錯,方便我們發現錯誤,而if a 0 不會。常見情況還有比如 if nullptr p 2...

C語言細節知識(四)

if 整型常量表示式1 程式段1 elif 整型常量表示式2 程式段2 elif 整型常量表示式3 程式段3 else 程式段4 endif 它的意思是 如常 表示式1 的值為真 非0 就對 程式段1 進行編譯,否則就計算 表示式2 結果為真的話就對 程式段2 進行編譯,為假的話就繼續往下匹配,直到...

C 程式設計中的細節

乙個簡單的示例來講解下這個問題。cpp class concrete class concrete1 class concrete2 public concrete1 class concrete3 public concrete2 int main 本來bit2的值是b,但是通過賦值後 bit2的...