/// <summary> /// 加密数据,出错抛异常 /// </summary> public byte[] Encrypt(byte[] data) { int blockLen = RSAObject.KeySize / 8 - 11; if (data.Length <= blockLen) { return(RSAObject.Encrypt(data, false)); } using var dataStream = new MemoryStream(data); using var enStream = new MemoryStream(); var buffer = new byte[blockLen]; int len = dataStream.Read(buffer, 0, blockLen); while (len > 0) { var block = new byte[len]; Array.Copy(buffer, 0, block, 0, len); var enBlock = RSAObject.Encrypt(block, false); enStream.Write(enBlock, 0, enBlock.Length); len = dataStream.Read(buffer, 0, blockLen); } return(enStream.ToArray()); }
/// <summary> /// 解密数据,解密异常返回null /// </summary> public byte[] DecryptOrNull(byte[] data) { try { int blockLen = RSAObject.KeySize / 8; if (data.Length <= blockLen) { return(RSAObject.Decrypt(data, false)); } using var dataStream = new MemoryStream(data); using var deStream = new MemoryStream(); byte[] buffer = new byte[blockLen]; int len = dataStream.Read(buffer, 0, blockLen); while (len > 0) { var block = new byte[len]; Array.Copy(buffer, 0, block, 0, len); var deBlock = RSAObject.Decrypt(block, false); deStream.Write(deBlock, 0, deBlock.Length); len = dataStream.Read(buffer, 0, blockLen); } return(deStream.ToArray()); } catch { return(null); } }
/// <summary> /// 验证data的签名是否是sgin,并指定hash算法(如:SHA256) /// </summary> public bool Verify(string hash, byte[] sgin, byte[] data) { try { return(RSAObject.VerifyData(data, hash, sgin)); } catch { return(false); } }
public IHttpActionResult getRSAKey(RSAObject obj) { var CCAVENUE_ACCESS_CODE = ConfigurationManager.AppSettings["CCAVENUE_ACCESS_CODE"]; if (CCAVENUE_ACCESS_CODE == obj.access_code) { string vParams = "access_code=" + obj.access_code + "&" + "order_id=" + obj.order_id; string queryUrl = "https://secure.ccavenue.com/transaction/getRSAKey"; var encStr = postPaymentRequestToGateway(queryUrl, vParams); if (encStr != null && encStr != "") { return(Ok(new{ RSAKey = encStr, Status = UTILITY.SUCCESSTATUS })); } else { return(Ok(new { RSAKey = "", Status = UTILITY.FAILURESTATUS })); } } else { return(Ok()); } }
/// <summary> /// 对data进行签名,并指定hash算法(如:SHA256) /// </summary> public byte[] Sign(string hash, byte[] data) { return(RSAObject.SignData(data, hash)); }
/// <summary> /// 导出XML格式密钥对,如果convertToPublic含私钥的RSA将只返回公钥,仅含公钥的RSA不受影响 /// </summary> public string ToXML(bool convertToPublic = false) { return(RSAObject.ToXmlString(!RSAObject.PublicOnly && !convertToPublic)); }