支付相关-算法知识1

 

资料:C# PKCS7加密解密

复制代码
//加密字符串
    public string Encryption(string toE)
    {
        //加密和解密必须采用相同的key,具体自己填写,但是必须为32位
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12345678123456781234567812345678");
        RijndaelManaged rijndaelManaged = new RijndaelManaged();
        rijndaelManaged.Key = keyArray;
        rijndaelManaged.Mode = CipherMode.ECB;
        rijndaelManaged.Padding = PaddingMode.PKCS7;
        ICryptoTransform icryptoTransform = rijndaelManaged.CreateEncryptor();

        byte[] toEncryptArray = UTF8Encoding.UTF8.GetBytes(toE);
        byte[] resultArray = icryptoTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

        return Convert.ToBase64String( resultArray, 0, resultArray.Length);
    }

    //解密字符串
    public string Decryption(string toD)
    { 
        //加密和解密必须采用相同的key,具体值自己填,但是必须为32位
        byte[] keyArray = UTF8Encoding.UTF8.GetBytes("12345678123456781234567812345678");
        RijndaelManaged rijndaelManaged = new RijndaelManaged();
        rijndaelManaged.Key = keyArray;
        rijndaelManaged.Mode = CipherMode.ECB;
        rijndaelManaged.Padding = PaddingMode.PKCS7;
        ICryptoTransform cTransform = rijndaelManaged.CreateDecryptor();

        byte[] toEncryptArray = Convert.FromBase64String(toD);
        byte[] resultArray = cTransform.TransformFinalBlock(toEncryptArray, 0, toEncryptArray.Length);

        return UTF8Encoding.UTF8.GetString(resultArray);
    }
复制代码

 

-------------------------------------------------------------------

参考资料:C# And Java 3DES加解密 ECB模式/PKCS7

还需要仔细看,不太符合想找的资料

 

 参考资料:如何在C#里面实现Java中的PKCS7加密的功能?

资料地址:https://bbs.csdn.net/topics/340147880

复制代码
/// <summary>
        /// 创建签名
        /// </summary>
        /// <param name="data">标签数据</param>
        /// <returns></returns>
        private static byte [] CreateSign(byte[] data)
        {
            if (data == null)
                throw new ArgumentNullException("数据不能为空");

            X509Certificate2 userCert = CreateCertificate(ConfigInfo.certFileName,ConfigInfo.Password);
            if (userCert == null)
                throw new ArgumentNullException("证书不能为空");

            ContentInfo content = new ContentInfo(data);//设置要签名的数据
            SignedCms signedCms = new SignedCms(content);
            CmsSigner signer = new CmsSigner(userCert);
            try
            {
                signedCms.ComputeSignature(signer);//创建签名
                return signedCms.Encode();
            }
            catch (CryptographicException ex)
            {
                throw ex;
            }

        }
复制代码

复制代码
/// <summary>
        /// 创建证书
        /// </summary>
        /// <param name="fileName">文件名称</param>
        /// <param name="password">密码</param>
        /// <returns></returns>
        public static X509Certificate2 CreateCertificate(string fileName, string password)
        {
            if (string.IsNullOrEmpty(fileName) || string.IsNullOrEmpty(password))
            {
                return null;
            }
            try
            {
                return new X509Certificate2(fileName, password, X509KeyStorageFlags.Exportable);
            }
            catch (CryptographicException ex)
            {
                throw ex;
            }
        }
复制代码

复制代码
/// <summary>
        /// 校验签名
        /// </summary>
        /// <param name="signature">标签数据</param>
        /// <param name="certificate">证书</param>
        /// <returns></returns>
        public static bool Verify(byte[] signature, byte[] data)
        {
            ContentInfo contentInfo = new ContentInfo(data);
            SignedCms verifyCms = new SignedCms(contentInfo,true);
            try
            {
                verifyCms.Decode(signature);
                verifyCms.CheckSignature(true);
                return true;
            }
            catch (CryptographicException ex)
            {
                ServiceHub.AddLog(RuntimeLogType.Exception, null, "签名解码失败:" + ex.Message, ex.StackTrace);
                throw ex;
            }
        }
复制代码

 

--------------------------------------------------

参考资料:求一位大神帮忙写一个JAVA对应的C#语言的签名方法

资料地址:https://bbs.csdn.net/topics/392437375

 

参考资料:RSA加解密,Java和C#互通

资料地址:https://blog.csdn.net/thc1987/article/details/81383365

需要重点看下。

 

posted on   荆棘人  阅读(312)  评论(0编辑  收藏  举报

编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
历史上的今天:
2018-11-29 iis托管管道模式-学习
2018-11-29 https单向证书
2018-11-29 单例模式再学习
2018-11-29 sql经常出现死锁解决办法
2018-11-29 sqlserver结束和监视耗时的sql

导航

< 2025年3月 >
23 24 25 26 27 28 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 31 1 2 3 4 5

统计

点击右上角即可分享
微信分享提示