/// 透過公鑰加密
public byte[] EncryptByPublicKey(string dataStr)
{
RSAParameters rsap = RSA.ExportParameters(false);
BigInteger biN = new BigInteger(rsap.Modulus);
BigInteger biE = new BigInteger(rsap.Exponent);
return EncryptString(dataStr, biE, biN); // 以公鑰指數 e 加密
}
/// 指定參數公鑰加密
public byte[] EncryptByPublicKey(string dataStr, string n, string e)
{
BigInteger biN = new BigInteger(n, 16);
BigInteger biE = new BigInteger(e, 16);
return EncryptString(dataStr, biE, biN);
}
/// 透過私鑰解密
public string DecryptByPrivateKey(byte[] dataBytes)
{
RSAParameters rsap = RSA.ExportParameters(true);
BigInteger biN = new BigInteger(rsap.Modulus);
BigInteger biD = new BigInteger(rsap.D);
return DecryptBytes(dataBytes, biD, biN); // 以私鑰指數 d 解密
}
/// 指定參數私鑰解密
public string DecryptByPrivateKey(byte[] dataBytes, string n, string d)
{
BigInteger biN = new BigInteger(n, 16);
BigInteger biD = new BigInteger(d, 16);
return DecryptBytes(dataBytes, biD, biN);
}
| 操作 | 用途 | 指數 |
|---|---|---|
| 公鑰加密 | 機密傳輸(僅私鑰持有者可解) | e |
| 私鑰解密 | 接收端解密 | d |
| 私鑰加密 | 數位簽名(身分驗證) | d |
| 公鑰解密 | 驗證簽名 | e |
核心邏輯皆委派給 EncryptString / DecryptBytes,差別在於傳入的指數參數。