一些機密的資料應得到保護,可以用對稱或不對稱秘鈅來機密這些資料。
通過對稱金鑰,可以使用同乙個金鑰加密解密。與不對稱金鑰的加密相比,加密和解密使用不同的金鑰:公鑰/私鑰。
如果使用乙個公鑰進行加密,就應該使用對應的私鑰進行解密,而不是使用公鑰解密。同樣,如果使用乙個私鑰加密,
就應該使用對應的公鑰解密,而不是使用私鑰解密。不可能從私鑰中計算出公鑰,也不可能從公鑰中計算出私鑰。
涉及案例如下:
1.建立和驗證簽名
public void run()
");//驗證金鑰
if (verifysignature(alicedata, alicesignature, _alicepubkeyblob))
}private void initalicekeys()
public byte createsignature(byte data, cngkey key)
return signature;
}public bool verifysignature(byte data, byte signature, byte pubkey)
return retvalue;
}
2.安全資料交換
using system;
using system.collections.generic;
using system.io;
using system.linq;
using system.security.cryptography;
using system.text;
using system.threading.tasks;
namespace securekeyexchange
; this.publickey = this.diffiehellman.publickey.tobytearray();
}public byte publickey
}public byte iv
}/// /// 加密演算法
///
/// 公鑰
/// 密文
///
public byte encrypt(byte publickey, string secretmessage)
");//設定對稱演算法的金鑰
this.aes.key = derivedkey;
//生成記憶體流
using (var ciphertext = new memorystream())
encryptedmessage = ciphertext.toarray();
}console.writeline($"加密資訊:");
return encryptedmessage;
}/// /// 解密演算法
///
/// 公鑰
/// 密文
///
///
public string decrypt(byte publickey, byte encryptedmessage, byte iv)
");//設定對稱演算法的金鑰
this.aes.key = derivedkey;
//設定向量
this.aes.iv = iv;
//生成記憶體劉
using (var plaintext = new memorystream())
decryptedmessage = encoding.utf8.getstring(plaintext.toarray());
}return decryptedmessage;
}public void dispose()
protected virtual void dispose(bool flag)}}
}//呼叫
static void main(string args)
}console.readline();
}
C 常用資料加密類
using system using system.collections.generic using system.io using system.linq using system.security.cryptography using system.text using system.thre...
C語言練習 資料加密
某個公司採用公用 傳遞資料,資料是四位的整數,在傳遞過程中是加密的,加密規則如下 每位數字都加上5,然後用和除以10的餘數代替該數字,再將第一位和第四位交換,第二位和第三位交換。include void swap int a,int b intmain void int n,i 3 printf 請...
C 金鑰生成和資料加密
1 最近在學習加密相關的東西,在這裡將自己用到的金鑰生成演算法和加密演算法記錄下來 使用ed25519公鑰簽名系統生成簽名,金鑰,向量iv 3 加密演算法 這裡使用openssl aes cbc進行資料的加密 4 流程 5 資料加密和解密 在資料加密和解密的時候遇到乙個問題,就是aes cbc演算法...