C#RSA公钥加密算法无填充base64字符串返回

开发经历

最近在做一个RSA公钥加密项目,客户明确要求数据填充模式采用RSA/ECB/NoPadding,并提供参考的JAVA代码段。由于内部有成熟的其他模块C#接口方法,领导要求使用C#开发。

解决方案

1.使用客户提供的JAVA代码,然后“移植”到C#中,在研究发现调用Java代码/库需要使用IKVM,这玩意处理起来很繁琐,需要使用到很多支持库文件和安装很多插件以及配置很多环境变量,导致开发效率极低且移植性很差(换个电脑开发凉凉)。
2.继续使用C#开发,在查阅很多资料中发现C#同开发经历的项目答案很少,只有只言片语。终于在某个回答中提及到BouncyCastle,带着试试看的想法,测试使用了一下,发现还真的可以使用,特将该经历分享给大家。
使用前须添加BouncyCastle.Crypto.dll,该dll大小约2.5M,代码如下:

/// 
        /// 公钥加密
        /// 
        /// 加密字符串
        /// 公钥
        /// Base64字符串
        public string RsaEncryptWithPublic(string clearText, string publicKey)
        {
     
            //  analogue of Java:
            //  Cipher rsa = Cipher.getInstance("RSA/ECB/nopadding");
            try
            {
     
                var bytesToEncrypt = Encoding.ASCII.GetBytes(clearText);

                var encryptEngine = new RsaEngine(); // new Pkcs1Encoding (new RsaEngine());


                using (var txtreader = new StringReader("-----BEGIN PUBLIC KEY-----\n" + publicKey + "\n-----END PUBLIC KEY-----"))
                {
     
                    var keyParameter = (AsymmetricKeyParameter)new PemReader(txtreader).ReadObject();

                    encryptEngine.Init(true, keyParameter);
                }

                var encrypted = Convert.ToBase64String(encryptEngine.ProcessBlock(bytesToEncrypt, 0, bytesToEncrypt.Length));
                return encrypted;
            }
            catch
            {
     

                return "";
            }
        }
``

你可能感兴趣的:(信息安全,加密,RSA,C#,JAVA,c#,RSA算法)