java作为客户端,对 .net服务 验证签名验证。
来源:互联网 发布:魔兽大脚插件for mac 编辑:程序博客网 时间:2024/05/17 09:34
基本环境:
客户的单点登录服务器是使用 .net 开发的。 所以私钥,公钥 都有他们生成。
我们的程序是 java 开发的,需要使用公钥 对齐发过来的数据进行签名认证。
问题就出来了,验证就是不成功。经过很久很久的纠结,最终找到答案。
明文: date = URLDecoder.decode(date,"GB2312");
摘要: signDate = URLDecoder.decode(signDate,"GB2312").replaceAll(" ", "+");
//对明文进行 sha-1 摘要计算 这就死关键的关键啊,
主要原因是 .net 的byte 与 java的byte 是不一样的。 这里需要进行16进制的转换,百思不得其解。
MessageDigest medt = MessageDigest.getInstance("SHA-1");
medt.update(date.getBytes());
byte[] pp = medt.digest();
StringBuffer buf = new StringBuffer("");
for(int i=0;i<pp.length;i++){
if((pp[i]&0xff)<0x10){
buf.append("0");
}
buf.append(Long.toString(pp[i]&0xFF,16));
}
date = buf.toString().toUpperCase();
//构建证书
CertificateFactory factory = CertificateFactory.getInstance("X.509");
Certificate cert = factory.generateCertificate(new FileInputStream(publicKeyPath));
X509Certificate x509 = (X509Certificate) cert;
PublicKey publicKey = x509.getPublicKey();
// 对摘要进行 签名验证
Signature signature = Signature.getInstance("SHA1withRSA");
signature.initVerify(publicKey);
signature.update(date.getBytes());
return signature.verify(decryptBASE64(signDate));
验证成功了,就以为解密就有思路了 呵呵!!!!
这个但是我纠结了很久, 某某银行的内部都在为这个纠结。 学会了才知道 原来如此简单。
- java作为客户端,对 .net服务 验证签名验证。
- 客户端和服务端验证签名
- Java Applet签名验证
- Java Applet签名验证
- Java Applet签名验证
- 制作Java Applet签名验证
- Java文件签名与验证
- 制作Java Applet签名验证
- NGINX文件签名下载验证服务
- 支付宝服务窗验证签名
- 验证签名
- asp.net使用客户端验证
- asp.net+JS客户端验证
- Asp.Net开启客户端验证
- Unity中对Apk签名验证
- .NET Core 使用RSA算法 加密/解密/签名/验证签名
- Java Web基础:客户端验证
- 使用JAVA实现签名验证示例程序
- void init_swapping(void)有问题
- PostgreSQL查询优化简介
- 计算机科学与技术专业2011级《数据结构》期中考试
- 涨工资了-读取写入文件
- 三层架构中使用实体类填充泛型集合代替DataTable解决方案(ASP.NET+C#)
- java作为客户端,对 .net服务 验证签名验证。
- DB2的日期和时间
- TPC头
- 重构--改善既有代码的设计:重构原则
- linux 包含了链接库仍然报错说某函数未定义的问题(解决办法)
- 在Unity3D中控制动画播放
- QString的函数使用
- JS中showModalDialog 详细使用
- mvc初试心得【鸡蛋】