예제 #1
1
파일: EncDecUtil.cs 프로젝트: radtek/crm
 /// <summary>
 /// RSA加密
 /// </summary>
 /// <param name="pCertFilePath">pfx证书文件路径</param>
 /// <param name="pCertFilePassword">pfx证书文件的密码</param>
 /// <param name="pEncryptContent">需要加密的内容</param>
 /// <returns>密文</returns>
 public static byte[] RSAEncrypt(string pCertFilePath, string pCertFilePassword, string pEncryptContent)
 {
     using (FileStream fs = new FileStream(pCertFilePath, FileMode.Open))
     {
         byte[] bytes = new byte[fs.Length];
         fs.Read(bytes, 0, bytes.Length);
         fs.Close();
         X509Certificate2 mycert = new X509Certificate2(bytes, pCertFilePassword,
                                                        X509KeyStorageFlags.MachineKeySet
                                                        | X509KeyStorageFlags.PersistKeySet
                                                        | X509KeyStorageFlags.Exportable);
         AsymmetricKeyParameter bouncyCastlePrivateKey = EncDecUtil.TransformRSAPrivateKey(mycert.PrivateKey);
         IBufferedCipher        c = CipherUtilities.GetCipher("RSA/ECB/PKCS1Padding");// 参数与JAVA中解密的参数一致
         c.Init(true, bouncyCastlePrivateKey);
         byte[] outBytes = c.DoFinal(Encoding.UTF8.GetBytes(pEncryptContent));
         return(outBytes);
     }
 }
예제 #2
0
파일: EncDecUtil.cs 프로젝트: radtek/crm
        /// <summary>
        /// 3DES解密
        /// </summary>
        /// <param name="pKey">解密密钥</param>
        /// <param name="pDecryptContent">需要解密的内容</param>
        /// <returns></returns>
        public static byte[] TripleDESDecrypt(string pKey, string pDecryptContent)
        {
            byte[] keyBytes     = Encoding.UTF8.GetBytes(pKey);
            byte[] contentBytes = Encoding.UTF8.GetBytes(pDecryptContent);

            return(EncDecUtil.TripleDESDecrypt(keyBytes, contentBytes));
        }
예제 #3
0
파일: PacketUtil.cs 프로젝트: radtek/crm
        /// <summary>
        /// 解析请求报文
        /// <remarks>
        /// <para>请求报文是支付前置发给商户平台的,用于通知API</para>
        /// </remarks>
        /// </summary>
        /// <param name="pCertFilePath">cer证书文件路径</param>
        /// <param name="pCertFilePassword">pfx证书文件密码</param>
        /// <param name="pRequestContent">加密后的请求内容</param>
        /// <returns></returns>
        public static string ParseRequestPackets(string pCerFilePath, string pRequestContent)
        {
            //参数检查
            if (string.IsNullOrWhiteSpace(pRequestContent))
            {
                return(null);
            }
            var content = pRequestContent.Replace("\0", string.Empty);

            if (string.IsNullOrWhiteSpace(content))
            {
                return(null);
            }
            //
            string[] sections = content.Split(new char[] { '|' }, StringSplitOptions.RemoveEmptyEntries);
            if (sections.Length != 3)
            {
                throw new ArgumentException("格式非法的报文.");
            }
            string merchantID = Encoding.UTF8.GetString(EncDecUtil.Base64Decrypt(sections[0]));

            byte[] encryptedKey = EncDecUtil.Base64Decrypt(sections[1]);
            string desKey       = Encoding.UTF8.GetString(EncDecUtil.RSADecrypt(pCerFilePath, encryptedKey));

            byte[] key              = Encoding.ASCII.GetBytes(desKey.Substring(0, 24));
            byte[] keyIV            = Encoding.ASCII.GetBytes(desKey.Substring(24, 8));
            byte[] encryptedContent = EncDecUtil.Base64Decrypt(sections[2]);
            string decryptedContent = Encoding.UTF8.GetString(EncDecUtil.TripleDESDecrypt(key, encryptedContent));

            //
            return(decryptedContent);
        }
예제 #4
0
파일: EncDecUtil.cs 프로젝트: radtek/crm
 /// <summary>
 /// 按Java的方式对源字符串进行MD5加密
 /// </summary>
 /// <param name="pSource"></param>
 /// <returns></returns>
 public static string MD5ForJava(string pSource)
 {
     return(EncDecUtil.MD5ForJava(Encoding.UTF8.GetBytes(pSource)));
 }
예제 #5
0
파일: EncDecUtil.cs 프로젝트: radtek/crm
 /// <summary>
 /// 3DES加密
 /// </summary>
 /// <param name="pKey">加密密钥</param>
 /// <param name="pEncryptContent">需要加密的内容</param>
 /// <returns></returns>
 public static byte[] TripleDESEncrypt(string pKey, byte[] pEncryptContent)
 {
     byte[] keyBytes = Encoding.UTF8.GetBytes(pKey);
     return(EncDecUtil.TripleDESEncrypt(keyBytes, pEncryptContent));
 }
예제 #6
0
파일: EncDecUtil.cs 프로젝트: radtek/crm
 /// <summary>
 /// Base64加密
 /// </summary>
 /// <param name="pEncryptContent">需要进行Base64加密的字符串(字符串以UTF-8编码)</param>
 /// <returns></returns>
 public static string Base64Encrypt(string pEncryptContent)
 {
     return(EncDecUtil.Base64Encrypt(Encoding.UTF8.GetBytes(pEncryptContent)));
 }