python rsa256 padding pkcs#7 GDCA 之前难了半个月的难题

这个是真的难住了,github各种技术论坛都没有python的pkcs#7和数字证书的方法。对面直接丢给我一个书名剩下的自己解决。没办法一直跟政府打交道的公司,这个代码不好上,而且是不想回忆的往事,先说解决方法。最后使用的现成的java例子,用了python去调用java代码。jpype,分个步骤讲解一下

1. 证书取出公私密钥的方法,虽然最后还是用的整个证书,但是这个方法研究了一下。相信你有实验的证书,我就不上传了

pfx格式证书转化为pem格式
openssl pkcs12 -in test.pfx -out server.pem -nodes


提出证书公钥
openssl x509 -in server.pem -out server.crt


pem证书提取pkcs#8私钥
openssl pkcs8 -topk8 -inform PEM -in server.pem -outform pem -nocrypt -out pri.pem


提取私钥
openssl rsa -in server.pem -out server.key


pem证书提取公钥

openssl rsa  -in server.pem -outform pem -pubout -out pub.pem

2. 使用python调用java,首先需要将java代码打成jar包。妈的我不懂java,费死劲了。网上教程自己搜一下。最重要的是打成jar包以后,需要在.mf写入java三方包的地址。下面的例子忘了好使不,先上了再说

java运行命令
java -cp ./:/home/nanfengpo/guangdong/diaoyongjava/java/lib/bcpkix-jdk15on-154.jar:/home/nanfengpo/guangdong/diaoyongjava/java/lib/bcprov-jdk15on-154.jar: testP7
java编译命令
javac -Xlint:unchecked -cp  ./:/home/nanfengpo/guangdong/diaoyongjava/java/lib/bcpkix-jdk15on-154.jar:/home/nanfengpo/guangdong/diaoyongjava/java/lib/bcprov-jdk15on-154.jar:  testP7.java
java打包命令
java -Xbootclasspath/a:/home/nanfengpo/guangdong/diaoyongjava/java/lib/bcpkix-jdk15on-154.jar:/home/nanfengpo/guangdong/diaoyongjava/java/lib/bcprov-jdk15on-154.jar:-jar test.jar
jar运行
java -jar fpx_agw1.jar

需要将上面的jar的地址写入mf文件./:/home/nanfengpo/guangdong/diaoyongjava/java/lib/bcpkix-jdk15on-154.jar:/home/nanfengpo/guangdong/diaoyongjava/java/lib/bcprov-jdk15on-154.jar这是我的三方包地址./必须写在前面,原因忘了,哈哈。这是mf文件中的例子:

            Manifest-Version: 1.0
Main-Class: testP7
Class-Path: /home/nanfengpo/guangdong/diaoyongjava/java/lib/bcpkix-jdk15on-154.jar
  /home/nanfengpo/guangdong/diaoyongjava/java/lib/bcprov-jdk15on-154.jar

  

最好找个专业java打包,他们三分钟解决。

3. 重点了,兄弟们。jpype,安装去github上直接找到官方,下载安装包,什么java运行环境啥的都给你搞定。

def jvmstart():
    from jpype import startJVM, JClass
    import os.path
    import jpype
    if not jpype.isJVMStarted():  # 查看java虚拟机启动没有
        # print('还没启动')
        basepath = os.path.dirname(__file__)
        jvmpath = jpype.getDefaultJVMPath()      # 自己查找java的运行地址
        jvmarg = "-Djava.class.path=%s" % os.path.join(basepath,'fpx_agw.jar')   # 我们的jar包的地址
        # print(jvmarg)
        startJVM(jvmpath,"-ea", jvmarg)  # 启动参数 java运行地址,jar包地址
        Properties = JClass("testP7")    # 实例化那个进行加密的类
        return Properties
    # print('已经启动')
    jpype.attachThreadToJVM()           # 我们的程序肯定是多线程多进程。需要使用这个,不能等着爆炸,报不知名错误
    Properties = JClass("testP7")          
    return Properties
def jvmshutdowm():                 # 这个方法不需要调用了,因为多线程,不能每次关闭
    from jpype import shutdownJVM
    import jpype
    if not jpype.isJVMStarted():
        shutdownJVM()
        # print('用完关闭')
    # print('还没开启')



猜你喜欢

转载自blog.csdn.net/weixin_42068117/article/details/80084294