예제 #1
0
        /// <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());
        }
예제 #2
0
        /// <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);
            }
        }
예제 #3
0
 /// <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);
     }
 }
예제 #4
0
        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());
            }
        }
예제 #5
0
 /// <summary>
 /// 对data进行签名,并指定hash算法(如:SHA256)
 /// </summary>
 public byte[] Sign(string hash, byte[] data)
 {
     return(RSAObject.SignData(data, hash));
 }
예제 #6
0
 /// <summary>
 /// 导出XML格式密钥对,如果convertToPublic含私钥的RSA将只返回公钥,仅含公钥的RSA不受影响
 /// </summary>
 public string ToXML(bool convertToPublic = false)
 {
     return(RSAObject.ToXmlString(!RSAObject.PublicOnly && !convertToPublic));
 }