打包签名验签
This commit is contained in:
@@ -0,0 +1,67 @@
|
||||
package com.sunyard.util;
|
||||
|
||||
import cn.hutool.core.bean.BeanUtil;
|
||||
import com.sunyard.RetWrap;
|
||||
import com.sunyard.proto.R;
|
||||
import com.sunyard.proto.Util;
|
||||
import org.bouncycastle.asn1.*;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
|
||||
public class ASN1Util {
|
||||
|
||||
|
||||
public static RetWrap takeOutOriginDataFromPKCS7Sign(String sign) throws IOException {
|
||||
RetWrap ret = new RetWrap();
|
||||
|
||||
ASN1Sequence seq = ASN1Sequence.getInstance( Util.decodeBase64( sign ) );
|
||||
ASN1TaggedObject tag = (ASN1TaggedObject) seq.getObjectAt(1).toASN1Primitive();
|
||||
ASN1Sequence seq2 = (ASN1Sequence) tag.getObject();
|
||||
ASN1Sequence seq3 = (ASN1Sequence) seq2.getObjectAt( 2 ).toASN1Primitive();
|
||||
ASN1TaggedObject tag2 = (ASN1TaggedObject) seq3.getObjectAt( 1 );
|
||||
DEROctetString o = (DEROctetString) tag2.getObject();
|
||||
ret.put( "orgData", o.getOctets() );
|
||||
|
||||
|
||||
ASN1TaggedObject tag3 = (ASN1TaggedObject) seq2.getObjectAt(3).toASN1Primitive();
|
||||
ASN1Sequence seq4 = (ASN1Sequence) tag3.getObject();
|
||||
ret.put("cert", CertUtil.encodeBase64(seq4.getEncoded()));
|
||||
|
||||
ASN1Sequence seq5 = (ASN1Sequence) seq4.getObjectAt( 0 ).toASN1Primitive();
|
||||
ASN1Sequence seq6 = (ASN1Sequence) seq5.getObjectAt( 6 ).toASN1Primitive();
|
||||
DERBitString pk = (DERBitString) seq6.getObjectAt( 1 ).toASN1Primitive();
|
||||
ret.put("pk", pk.getEncoded() );
|
||||
|
||||
ASN1Encodable[] elements = seq3.toArray();
|
||||
ASN1Encodable[] elements2 = new ASN1Encodable[ elements.length - 1];
|
||||
for ( int i = 0; i < elements.length -1 ; i++ ){
|
||||
elements2[i] = elements[i];
|
||||
}
|
||||
|
||||
BeanUtil.setProperty( seq3, "elements", elements2);
|
||||
|
||||
ret.put("sign", Util.encodeBase64(seq.getEncoded()) );
|
||||
return ret;
|
||||
}
|
||||
|
||||
public static String addOriginDataToPKCS7Sign( byte[] originData, String sign) throws IOException {
|
||||
ASN1Sequence seq = ASN1Sequence.getInstance( Util.decodeBase64( sign ) );
|
||||
ASN1TaggedObject tag = (ASN1TaggedObject) seq.getObjectAt(1).toASN1Primitive();
|
||||
ASN1Sequence seq2 = (ASN1Sequence) tag.getObject();
|
||||
ASN1Sequence seq3 = (ASN1Sequence) seq2.getObjectAt( 2 ).toASN1Primitive();
|
||||
|
||||
ASN1Encodable[] elements = seq3.toArray();
|
||||
ASN1Encodable[] elements2 = new ASN1Encodable[ elements.length + 1];
|
||||
for ( int i = 0; i < elements.length ; i++ ){
|
||||
elements2[i] = elements[i];
|
||||
}
|
||||
|
||||
elements2[ elements.length ] = new DERTaggedObject(true, 0, new DEROctetString( originData ));
|
||||
|
||||
BeanUtil.setProperty( seq3, "elements", elements2);
|
||||
|
||||
return Util.encodeBase64(seq.getEncoded());
|
||||
}
|
||||
|
||||
}
|
||||
@@ -0,0 +1,9 @@
|
||||
package com.sunyard.util;
|
||||
|
||||
import sun.misc.BASE64Encoder;
|
||||
|
||||
public class CertUtil {
|
||||
public static String encodeBase64(byte[] data){
|
||||
return new BASE64Encoder().encode( data );
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user