JAVA和C++双向验证

问题描述

背景:两个系统(一个C++一个Java)实现双向签名与验签!描述:由C++程序调用OpenSSL生成公私钥串入库,然后使用私钥签名,发送给Java端,由Java去验签。我拿到公钥串和签名值后,使用如下方法,可以验签成功!RSAPublicKeyStructurersa=newRSAPublicKeyStructure((ASN1Sequence)ASN1Sequence.fromByteArray(pubKey));RSAPublicKeySpecress=newRSAPublicKeySpec(rsa.getModulus(),rsa.getPublicExponent());KeyFactorykeyFactory=KeyFactory.getInstance("RSA");PublicKeypublicKey=keyFactory.generatePublic(ress);但是,我拿到私钥(C++生成入库的串,此时主要是想试验一下)后加签,却一直抛异常:java.lang.ClassCastException:org.bouncycastle.asn1.DERApplicationSpecificcannotbecasttoorg.bouncycastle.asn1.ASN1Sequence抛异常部分代码如下:RSAPrivateKeyStructureasn1PrivKey=newRSAPrivateKeyStructure((ASN1Sequence)ASN1Sequence.fromByteArray(privateKey));RSAPrivateKeySpecrsaPrivKeySpec=newRSAPrivateKeySpec(asn1PrivKey.getModulus(),asn1PrivKey.getPrivateExponent());测试环境:jdk1.6、bcprov-jdk16-1.46.jar由于本人不太了解C++,所以对于C++调用OpenSSL后生成的密钥格式也不太清楚,忘各位大牛指点一二!十分感谢!

解决方案

解决方案二:
正巧也遇到该问题,不知您解决了没?
解决方案三:
网络传送由C++发送过来时需要asn1解码。本地不需要asn1解码。
解决方案四:
引用2楼t_jl1979的回复:

网络传送由C++发送过来时需要asn1解码。本地不需要asn1解码。

可以说说具体的实现方式吗
解决方案五:
asn1实现不同语言的通讯,本地不涉及自然不需要asn1.引用3楼baohuan_love的回复:

Quote: 引用2楼t_jl1979的回复:
网络传送由C++发送过来时需要asn1解码。本地不需要asn1解码。

可以说说具体的实现方式吗

解决方案六:
privateKey应该为Base64解码之后的值。试试看呢
解决方案七:
私钥格式不对,看看生成的openssl参数,私钥是什么格式的,不行就用openssl转格式

时间: 2024-09-20 20:37:01

JAVA和C++双向验证的相关文章

Java实现SSL双向认证的方法_java

本文实例讲述了Java实现SSL双向认证的方法.分享给大家供大家参考,具体如下: 我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确的,当然如果你访问的URL压根就错了,那谁也没有办法.这个就是所谓的SSL单向认证. 但是实际中,我们有可能还会验证客户端是否符合要求,也就是给我们每个用户颁发一个证书,比且每个数字证书都是唯一的,不公开的.这样就能通过这个数字证书保证当前访问我服务器的这个用户是经过服务器认可的,其他人不可访问. 双向认证 从第一个层面上 确保了服务器 与客户端 都是互相

使用java连接AD域,验证账号密码是否正确

web项目中有时候客户要求我们使用ad域进行身份确认,不再另外做一套用户管理系统.其实客户就是只要一套账号可以访问所有的OA,CRM等办公系统. 这就是第三方验证.一般有AD域,Ldap,Radius,邮件服务器等.最常用的要数AD域了.因为window系统在国内占据了大量的江山.做起来也很方便. 我这篇文章就是写,如何用java去实现AD域的身份验证.好了,直接看代码吧: package com.test; import java.util.Hashtable; import javax.na

java 中用户名密码验证的代码怎么写?急!!在线等

问题描述 java 中用户名密码验证的代码怎么写?急!!在线等 import java.awt.GridLayout; import java.awt.event.*; import javax.swing.*; import com.sdu.wh.bll.UserQueryBll; import com.sdu.wh.dao.*; import com.sdu.wh.sql.*; public class LoginFrame extends JDialog implements Action

java-我用Java写了一个验证教师身份登录的小程序

问题描述 我用Java写了一个验证教师身份登录的小程序 如下 为什么输出的psw和gs1相等但是message的值改变不了? public boolean checkTeacherInfo(String teacherID,String psw){ message=false; sql="select top 1 * from TeacherTab where teacherID=?"; try{ con=dbcon.getConnect(); pst=con.prepareState

求大神给个用ajax+java连接oracle的验证用户名是否存在的全部代码

问题描述 求大神给个用ajax+java连接oracle的验证用户名是否存在的全部代码 求大神给个用ajax验证 连接oracle数据库 验证用户名是否存在的全部代码 跪谢了 解决方案 例子http://download.csdn.net/detail/jiuqiyuliang/7728183#comment 解决方案二: 这个也不难,你写个就是了,你连接上数据库后,在页面点击输入框失去焦点时执行ajax让它到后台去数据库验证这个用户名是否存在就可以了,这个你可以完全 不要示例的,用jquery

cxf 调用 https 双向验证

问题描述 cxf 调用 https 双向验证 解决方案 没有人吗,顶顶,顶自己一个

java 写的登录验证问题

问题描述 java 写的登录验证问题 public class LoginCheck extends HttpServlet { /** * Constructor of the object. */ public LoginCheck() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { r

详解iOS开发 - 用AFNetworking实现https单向验证,双向验证_IOS

自苹果宣布2017年1月1日开始强制使用https以来,htpps慢慢成为大家讨论的对象之一,不是说此前https没有出现,只是这一决策让得开发者始料未及,博主在15年的时候就做过https的接口,深知此坑之深,原因就是自身对这方面知识不了解加上网上的资料少,除此外还有博客不知对错就互相转载,导致当时网上几乎找不到能用的代码,这一点,博主说的毫不夸张. 鉴于此,博主一直想填一下这个坑,多增加一些正确的代码,来供广大开发者使用,后来一直被搁置,经过尝试后,博主现将整理好的代码发布在这里,希望能帮到

使用Nginx实现HTTPS双向验证的方法_nginx

https单向验证应用广泛想必大家都很熟悉,我已经在一篇博文中分享过,这次来看看Nginx如何实现双向验证. 单向验证与双向验证的区别: 单向验证: 指客户端验证服务器端证书,服务器并不需要验证客户端证书. 双向验证:指客户端验证服务器端证书,而服务器也需要通过CA的公钥证书来验证客户端证书. 详细的握手过程: 单向验证 浏览器发送一个连接请求给安全服务器. 1.服务器将自己的证书,以及同证书相关的信息发送给客户浏览器. 2.客户浏览器检查服务器送过来的证书是否是由自己信赖的CA中心所签发的.如