我的编程空间,编程开发者的网络收藏夹
学习永远不晚

RSA密钥--JAVA和C#的区别及联系

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

RSA密钥--JAVA和C#的区别及联系

首先感谢:http://www.codeproject.com/Articles/25487/Cryptographic-Interoperability-Keys的文章。

由于公司同时使用.NETJAVA,而且各个服务集使用接口来进行通信,因此某些例如清算系统、收银台之类的安全性比较高的系统会使用RSA进行加密。因此会涉及到密钥的转换。所以大概看了下C#的秘钥跟JAVA的密钥区别。
RSA对于程序本身是没有区别的,其格式都是相同的。对于不同的程序来说,存储使用的语法(包装的类)会有所不同。
RSA语法和语法标准有很多,大的类型大概分为ASN.1PKCSX.509

1、RSA语法介绍

ASN.1、PKCS是最初的,也是最主要的RSA公钥和私钥的语法标准,被RSA Lab所维护。
ASN.1、PKCS#1都定义了公钥和私钥的类型——序列化的数字。

为了下一个层次的抽象(适当的包装),现在一般使用的组合是:PKCS#8的私钥,X.509的公钥 。

PKCS语法主要用于私钥,其内部标准目前有10种。目前JAVA普遍使用的是PKCS#8,用作私钥格式。
X.509语法主要用于公钥,广泛使用于web浏览器和SLL
3种语法标准的公私钥可以实现相互转化,其核心为ASN1语法中的整数值(modulusPublicExponentprivateExponent ),其余的数值都可以经过计算后得出。

.NET使用的是标准的RSA格式,然后将其中的数字base64编码后,生成XML进行存储。
java中使用的是PKCS#8,、X.509的公私钥语法,存储的都是相应的JAVA类自动生成的base64字符串。
由于存储格式的区别,在相互转换、读取的时候,需要理解RSA相关的知识,才能正确使用类来转换。

1.1 C#转JAVA

C#中的公私钥使用XML字符串进行存储,读取时直接读入字符串即可。
由于C#使用的是标准的RSA格式,因此JAVA的RSAPublicKeySpecRSAPrivateKeySpec配置类的核心参数(modulusPublicExponentprivateExponent )都可以从对应XML中的节点值(Modulus-modulus Exponent-PublicExponent D-privateExponent base64解码后获取。然后将其传入JAVA配置类中,然后根据配置类生成相应的RSA公私钥。


 View Code

1.2 JAVA转C#

JAVA中的公私钥使用base64进行存储,解码成字节数组后,首先需要生成相应的配置对象(PKCS#8,、X.509 ),根据配置对象生成RSA公私钥。

私钥:

C#使用的是标准的RSA格式,PKCS#1语法中包含了标准RSA格式私钥中的所有整数值。配置对象需要生成PKCS#1语法的RSA对象(RSAPrivateCrtKey),获取对象属性,自行构造私钥XML


 View Code

公钥:

公钥跟私钥生成步骤相同,配置对象生成标准的RSA对象(RSAPublicKey)。


 View Code

到此这篇关于RSA密钥--JAVA和C#的区别及联系的文章就介绍到这了,更多相关RSA密钥 JAVA C#内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

RSA密钥--JAVA和C#的区别及联系

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

【JAVA】JAVA与C++的区别与联系

个人主页:【😊个人主页】 系列专栏:【❤️初识JAVA】 文章目录 前言两方介绍C++JAVA 不同==|Java不支持指针、模板、指针重载、联合等|====|支持析构函数|====|条件编译和包含|
2023-08-16

c语言和c++的区别和联系

c语言和c++是计算机科学领域应用广泛的编程语言。虽然它们有着相似的基础,但它们在语言类型、语法功能和内存管理方面存在着显著差异。c语言是一种面向过程的语言,而c++是一种面向对象的语言。c++扩展了c语言的类型系统,引入了引用、函数重载和
c语言和c++的区别和联系
2024-03-14

android与java的区别及联系

从整体来讲,Java和Android的区别在于:Android程序是基于组件和配置的,而且Android开发以Java语言为开发工具,表面上看他们有点同宗不同门,但实际上区别十分大。Android是一个主流智能手机操作系统,Java是一种开发语言,两者没有好坏
android与java的区别及联系
2016-11-14

java中volatile和synchronized的区别与联系

java中volatile和synchronized的区别与联系这个可能是最好的对比volatile和synchronized作用的文章了。volatile是一个变量修饰符,而synchronized是一个方法或块的修饰符。所以我们使用这两
2023-05-31

java中实例与对象的区别和联系

对象是抽象的说法,你可以把它看作一个符合它自身定义的所有实例的代表,而实例则是对象的现实体现。你可以说一个实例是一个对象,但你不能说一个对象是一个实例。因为定义对象时只是把自身的规则和逻辑定义好,实例可以通过输入不同的数据使得自己和其他实例不同。 java相
java中实例与对象的区别和联系
2018-12-10

如何理解JRE和JVM的区别及有什么联系

这篇文章将为大家详细讲解有关如何理解JRE和JVM的区别及有什么联系,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。你对JRE和JVM的概念是否熟悉,这里和大家分享一下两者的区别,所有的Jav
2023-06-17

如何分析C++数组和指针的区别与联系

这期内容当中小编将会给大家带来有关如何分析C++数组和指针的区别与联系,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。前言:一直以来,有很多地方在说到数组和指针时都会说数据就是指针,这种观点也被越来越多的人
2023-06-26

Android package属性、package name和Application ID三者的联系及区别

Android package属性、package name和Application ID三者的联系及区别package属性:在AndroidManifest.xml文件中。package name:应用程序的包名。Application
2022-06-06

弄清Go语言和C语言指针的区别与联系

Go语言和C语言是两种流行的编程语言,它们在许多方面都有相似之处,但在指针的概念和用法上有一些明显的区别。本文将深入探讨Go语言和C语言指针的区别与联系,并通过具体的代码示例进行说明。首先,我们来看看C语言中指针的基本概念和用法。在C语言
弄清Go语言和C语言指针的区别与联系
2024-03-07

探讨Go语言并发和并行之间的区别及联系

Go语言是一种由Google开发的编程语言,以其并发编程特性而闻名。在Go语言中,有两个重要的概念——并发和并行。虽然这两个概念看起来类似,但它们之间有着微妙的区别和联系。本文将探讨Go语言中并发和并行的区别,并通过具体的代码示例来解释它们
探讨Go语言并发和并行之间的区别及联系
2024-03-12

如何理解HTML开发中.html和.htm和.shtml以及.shtm的区别与联系

如何理解HTML开发中.html和.htm和.shtml以及.shtm的区别与联系,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。大家都知道,我们每天浏览的网页或者网站或者w
2023-06-08

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录