实例-ping++ java验签(签名,公钥,charge)怎么获取

问题描述

ping++ java验签(签名,公钥,charge)怎么获取
这是官网demo

 package example;import java.io.FileInputStream;import java.security.InvalidKeyException;import java.security.KeyFactory;import java.security.NoSuchAlgorithmException;import java.security.PublicKey;import java.security.Signature;import java.security.SignatureException;import java.security.spec.X509EncodedKeySpec;import org.apache.commons.codec.binary.Base64;import Decoder.BASE64Decoder;/** * Created by sunkai on 15/5/19. webhooks 验证签名示例 *  * 该实例演示如何对 ping++ webhooks 通知进行验证。 * 验证是为了让开发者确认该通知来自 ping++ ,防止恶意伪造通知。用户如果有别的验证机制,可以不进行验证签名。 *  * 验证签名需要 签名、公钥、验证信息,该实例采用文件存储方式进行演示。 * 实际项目中,需要用户从异步通知的 HTTP header 中读取签名,从 HTTP body 中读取验证信息。公钥的存储方式也需要用户自行设定。 *  *  该实例仅供演示如何验证签名,请务必不要直接 copy 到实际项目中使用。 *  */public class WebHooksVerifyExample {    private static String filePath = ""src/my-server.pub"";    private static String eventPath = ""src/charge"";    private static String signPath = ""src/sign"";    /**     * 验证webhooks 签名,仅供参考     * @param args     * @throws Exception     */    public static void main(String[] args) throws Exception {        boolean result = verifyData(getByteFromFile(eventPath false) getByteFromFile(signPath true) getPubKey());        System.out.println(""验签结果:""+result);    }    /**     * 读取文件部署web程序的时候,签名和验签内容需要从request中获得     * @param file     * @param base64     * @return     * @throws Exception     */    public static byte[] getByteFromFile(String file boolean base64) throws Exception {        FileInputStream in = new FileInputStream(file);        byte[] fileBytes = new byte[in.available()];        in.read(fileBytes);        in.close();        String pubKey = new String(fileBytesUTF-8"");        if (base64) {            BASE64Decoder decoder = new BASE64Decoder();            fileBytes = decoder.decodeBuffer(pubKey);//          fileBytes = Base64.decodeBase64(pubKey);        }        return fileBytes;    }    /**     * 获得公钥     * @return     * @throws Exception     */    public static PublicKey getPubKey() throws Exception {        // read key bytes        FileInputStream in = new FileInputStream(filePath);        byte[] keyBytes = new byte[in.available()];        in.read(keyBytes);        in.close();        String pubKey = new String(keyBytesUTF-8"");        pubKey = pubKey.replaceAll(""(-+BEGIN PUBLIC KEY-+\r?\n|-+END PUBLIC KEY-+\r?\n?)""");        keyBytes = Base64.decodeBase64(pubKey);        // generate public key        X509EncodedKeySpec spec = new X509EncodedKeySpec(keyBytes);        KeyFactory keyFactory = KeyFactory.getInstance(""RSA"");        PublicKey publicKey = keyFactory.generatePublic(spec);        return publicKey;    }    /**     * 验证签名     * @param data     * @param sigBytes     * @param publicKey     * @return     * @throws NoSuchAlgorithmException     * @throws InvalidKeyException     * @throws SignatureException     */    public static boolean verifyData(byte[] data byte[] sigBytes PublicKey publicKey) throws NoSuchAlgorithmException InvalidKeyException SignatureException {        Signature signature = Signature.getInstance(""SHA256withRSA"");        signature.initVerify(publicKey);        signature.update(data);        return signature.verify(sigBytes);    }}

解决方案

http://www.blogjava.net/icewee/archive/2012/05/21/378719.html

解决方案二:
webhooks的验证签名:
verifyData(byte[] data byte[] sigBytes PublicKey publicKey)中
data:验证数据(Ping++webhooks返回的通知,这个是一个Json对象,你不用关心这个)(getByteFromFile(eventPath false))
sigBytes:response header里的签名 getByteFromFile(signPath true)
pubkey:Ping++管理平台“Ping++公钥”(getPubKey() 可以获取)

你可以直接run这个main方法

时间: 2024-11-03 06:44:04

实例-ping++ java验签(签名,公钥,charge)怎么获取的相关文章

php对接java现实加签验签的实例_php实例

我实现的方法,主要是把java生成的密钥转为php能识别的pem格式的密钥,其它的加签.验签采用调用openssl内置签名方法. java生成的密钥主要是字符串:而pem格式密钥是以64位为一行,并且带有如下头和尾的文件格式,然后php再去取得相对应pem格式字符串. pem格式密钥 -----BEGIN PUBLIC KEY----- //64chars一行(多行) -----END PUBLIC KEY----- -----BEGIN RSA PRIVATE KEY----- //64cha

php对接java现实加签验签的实例

我实现的方法,主要是把java生成的密钥转为php能识别的pem格式的密钥,其它的加签.验签采用调用openssl内置签名方法. java生成的密钥主要是字符串:而pem格式密钥是以64位为一行,并且带有如下头和尾的文件格式,然后php再去取得相对应pem格式字符串. pem格式密钥 -----BEGIN PUBLIC KEY----- //64chars一行(多行) -----END PUBLIC KEY----- -----BEGIN RSA PRIVATE KEY----- //64cha

php rsa 加密,解密,签名,验签详解_php技巧

php rsa 加密,解密,签名,验签 由于对接第三方机构使用的是Java版本的rsa加解密方法,所有刚开始在网上搜到很多PHP版本的rsa加解密,但是对接java大多都不适用. 以下php版本是适用于对接java接口,java适用密钥再php语言使用是需要添加 -----BEGIN CERTIFICATE----- -----END CERTIFICATE----- 使用密钥:加密公钥  public_key.cer 解密私钥  private_key.key 签名私钥 sign_key.ke

Java Http接口加签、验签操作方法_java

1.业务背景 最近接触了一些电商业务,发现在处理电商业务接口时,比如淘宝.支付类接口,接口双方为了确保数据参数在传输过程中未经过篡改,都需要对接口数据进行加签,然后在接口服务器端对接口参数进行验签,确保两个签名是一样的,验签通过之后再进行业务逻辑处理.我们这里主要介绍一下处理思路,至于签名算法我不做过多介绍,网上一大堆. 2.处理思路 双方约定好,参数按特定顺序排列,比如按首字母的顺序排列,如url:http://xxx/xxx.do?a=wersd&b=sd2354&c=4&si

验签

1,验签的输入 签名的验证有3个输入: (1)密码(用于签名的种子);(2)签名本身;(3)公钥 2,验签的应用场景 邮件的加密发送 具体步骤: 插上key,key中包含私钥和签名; 弹框要求输入密码; 使用公钥和签名来验证签名,如果密码不对,则验签失败; 若验签成功,则产生随机秘钥E; 使用随机秘钥E加密邮件内容M,得到M2; 使用对方的公钥对E进行加密,得到E2; 把M2,E2,发送给对方. 对方收到之后,使用私钥对E2,进行解密,得到E; 使用E对M2进行解密得到明文邮件.

农行支付成功,回调验签失败

问题描述 农行支付成功,回调验签失败 农行支付成功,回调时 String msg = request.getParameter("MSG"); try { PaymentResult pr = new PaymentResult(msg); if(pr.isSuccess()){ System.out.println("成功"); }else{ System.out.println("失败"); } } catch (TrxException e

Android 获取签名公钥和公钥私钥加解密的方法(推荐)_Android

如下所示: public class GetPublicKey { /** * 获取签名公钥 * @param mContext * @return */ protected static String getSignInfo(Context mContext) { String signcode = ""; try { PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( GetAppInfo.g

Android 获取签名公钥 和 公钥私钥加解密

public class GetPublicKey { /** * 获取签名公钥 * @param mContext * @return */ protected static String getSignInfo(Context mContext) { String signcode = ""; try { PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( GetAppInfo.getPack

Android 获取签名公钥和公钥私钥加解密的方法(推荐)

如下所示: public class GetPublicKey { /** * 获取签名公钥 * @param mContext * @return */ protected static String getSignInfo(Context mContext) { String signcode = ""; try { PackageInfo packageInfo = mContext.getPackageManager().getPackageInfo( GetAppInfo.g