java 提供RSA 公钥,C#用公钥加密后,java 解密的相关问题

问题描述

现在情况是java方提供了公钥是这样的(85cbe3b8ecbeb3fb2f66127ec44329ba8a525452edb92bfcc3b0cac0765c4ec0745d157c62830003fc4629fa89d3a1f89719734c27e7c7290bb74316d5bc7f31bd4852f10a3bdf864a83401d56c5104c98560e54e981da2388fa2dd0c5513e51357263db82f056c92c25d37c81e69ade92935f954ece0dd95202735122a92b3d)现在C#要用这个公钥加密,但是相同的明文每次加密结果都不一样,而java方说每次加密的密文都一样的不知道是我使用该公钥的方式有问题,还是其他问题,部分代码如下:publicstringEncrypRSA(stringcontent){stringexponent="10001";stringmodulus="85cbe3b8ecbeb3fb2f66127ec44329ba8a525452edb92bfcc3b0cac0765c4ec0745d157c62830003fc4629fa89d3a1f89719734c27e7c7290bb74316d5bc7f31bd4852f10a3bdf864a83401d56c5104c98560e54e981da2388fa2dd0c5513e51357263db82f056c92c25d37c81e69ade92935f954ece0dd95202735122a92b3d";RSAParametersrsaParameters2=newRSAParameters(){Exponent=RSA.MyRSAcs.hexStringToBytes(exponent),//newbyte[]{01,00,01}Modulus=RSA.MyRSAcs.hexStringToBytes(modulus),//newbyte[]{A3,A6,...}};RSACryptoServiceProviderrsa=newRSACryptoServiceProvider();rsa.ImportParameters(rsaParameters2);byte[]sample=rsa.Encrypt(Encoding.Default.GetBytes(content),false);stringj2=RSA.MyRSAcs.ToHexString(sample);stringd2=j2;returnj2;}

希望有相关经验的朋友解答下!谢谢!

解决方案

解决方案二:
java里面一个字符是两个字节,C#里面一个字符是一个字节。而加密算法中加密是按照字节加密的,因此同样的公钥字符串,得出的结果应该是不一样的。你们应该用同样的byte[]数组,而不是同样的字符串。你让java端将他的明文和公钥以byte数组的形式给你,保证两边的送进去加密的byte数组是一样的,然后再试试。
解决方案三:
引用1楼Libby1984的回复:

java里面一个字符是两个字节,C#里面一个字符是一个字节。而加密算法中加密是按照字节加密的,因此同样的公钥字符串,得出的结果应该是不一样的。你们应该用同样的byte[]数组,而不是同样的字符串。你让java端将他的明文和公钥以byte数组的形式给你,保证两边的送进去加密的byte数组是一样的,然后再试试。

好,谢谢提供信息,那C#中的RSA加密每次密文不一样这个是正常的吗?java那边每次加密的密文都是一样的!
解决方案四:
引用2楼yisheng314的回复:

Quote: 引用1楼Libby1984的回复:
java里面一个字符是两个字节,C#里面一个字符是一个字节。而加密算法中加密是按照字节加密的,因此同样的公钥字符串,得出的结果应该是不一样的。你们应该用同样的byte[]数组,而不是同样的字符串。你让java端将他的明文和公钥以byte数组的形式给你,保证两边的送进去加密的byte数组是一样的,然后再试试。

好,谢谢提供信息,那C#中的RSA加密每次密文不一样这个是正常的吗?java那边每次加密的密文都是一样的!

理论上应该是一样的。其实最主要的还是看你的私钥能否解开公钥加密的数据。或者公钥解开私钥加密的数据。

时间: 2024-07-30 03:31:20

java 提供RSA 公钥,C#用公钥加密后,java 解密的相关问题的相关文章

rsa加解密-java产生RSA公钥,C++进行加密问题

问题描述 java产生RSA公钥,C++进行加密问题 如何将java生产的RSA公钥传递给C++,C++采用的加密函数是RSA_public_encrypt.是否需要将java产生的公钥进行什么格式转换?

求助:如何用C语言编程获取证书中的RSA公钥?

问题描述 如何用C语言编程获取证书中的RSA公钥,然后用RSA公钥对会话密钥加密后进行传输呢?CertOpenStoreCertFindCertificateInStore这些函数是包含在哪个头文件中呢? 解决方案 解决方案二:Error1errorLNK2019:unresolvedexternalsymbol__imp__CertCloseStore@8referencedinfunction"struct_CERT_CONTEXTconst*__cdeclGetCertificateCon

Java中RSA非对称密钥加解密使用示例

一.简介: RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.RSA是第一个比较完善的公开密钥算法,它既能用于加密,也能用于数字签名.这个算法经受住了多年深入的密码分析,虽然密码分析者既不能证明也不能否定RSA的安全性,但这恰恰说明该算法有一定的可信性,目前它已经成为最流行的公开密钥算法. 二.RSA的公钥.私钥的组成,以及加密.解密的公式可见于下表 三.使用方式: ① 假设A.B机器进行通信,已A机器为主: ② A首先需要用自己的私钥为发送请求数据签名,并将公钥一同发送给B

安全技术—RSA公钥密码体制安全性分析_漏洞研究

 引言   RSA密码系统是较早提出的一种公开钥密码系统.1978年,美国麻省理工学院(MIT)的Rivest,Shamir和Adleman在题为<获得数字签名和公开钥密码系统的方法>的论文中提出了基于数论的非对称(公开钥)密码体制,称为RSA密码体制.RSA是建立在"大整数的素因子分解是困难问题"基础上的,是一种分组密码体制.   介绍公钥密码体制(背景)   1.对称密码体制   对称密码体制是一种传统密码体制,也称为私钥密码体制.在对称加密系统中,加密和解密采

java实现RSA加密与SHA签名的例子

看到这篇文章的同学可幸福了,当时在做RSA加密与签名的时候网上的资料简直不要太老,做完后实在是忍受不下去了,这篇文章我会详细讲解iOS如何实现RSA加密与签名,并且与Java完全同步,这是我的第二篇博客,若有什么不足之处还请大家指教. 什么是RSA? 答:RSA是一种非对称加密算法,常用来对传输数据进行加密,配合上数字摘要算法,也可以进行文字签名. RSA加密中padding? 答:padding即填充方式,由于RSA加密算法中要加密的明文是要比模数小的,padding就是通过一些填充方式来限制

HTTP使用RSA公钥加密算法加密明文

网站想要加密传输数据以防被窃取,最可靠的方式莫过于使用公钥加密算法加密,使用HTTPS协议的网站在整个传输过程中都使用了这个技术,对于未能使用HTTPS的HTTP网站我们也可以自行实现. 功能说明 由于HTTP是直接传输明文数据的,在网络安全越发严峻的今天,未经加密的HTTP方式已经变得岌岌可危,谷歌公司更是直接表明在搜索结果中会优先考虑使用HTTPS加密的网站. 尽管整体趋势是向HTTPS倾斜的,但是由于诸多服务器以及CDN等服务商还没全面兼容HTTPS协议,目前要实现整站切换至HTTPS协议

RSA公钥的问题

问题描述 从后台获取到的经过BASE64加密的RSA公钥,经过BASE64解码后,是一堆乱码,这个RSA公钥要怎么用啊?在网上查资料说RSA公钥一般都是按照(公钥+模值)一对来分发的,但是从解析出来的结果来看,完全分不清哪个是公钥哪个是模值啊?RSA公钥解码前,MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCuOI6oMgOBibOgFWswkKmt5QjORrfQmVZ/eKiOPqqUfa0jRAtKdV1jgLiuMR3wbItFp1zel62TtKCG4GN

.NET的那种RSA加解密算法能与JAVA的RSA加解密的保持一致?

问题描述 .NET的RSA加密usingOrg.BouncyCastle.Crypto;usingOrg.BouncyCastle.Pkcs;usingOrg.BouncyCastle.Security;///<summary>///RSA私钥加密///</summary>///<paramname="data">数据</param>///<paramname="key">私钥</param>/

java 有没有能运行一次后,删除自身的方法。为什么好多人说删除自身就是在写病毒...

问题描述 java 有没有能运行一次后,删除自身的方法.为什么好多人说删除自身就是在写病毒... 我希望做一个能自动获得服务器上新版本并自我更新的程序.当检测到有新版本就用 新版本替换自身.程序是个jar文件,目前的问题是,如何替换. 我能想到的方法:主程序名为a.jar,因为正在运行的程序不能被删除替换, 所以先将新版本下载,名为aTemp.jar,运行aTemp.jar.a.jar关闭自身,aTemp.jar删除 a.jar,复制aTemp.jar并名为a.jar.最后,删除自身.即aTem