精华内容
下载资源
问答
  • 一个可以实现简单数字信封的python源代码,可以参考学习,技术有限。一个可以实现简单数字信封的python源代码,可以参考学习,技术有限。
  • 使用QtDesigner设计界面,将UI界面与逻辑业务分离,使用sm4,aes等加密方式实现文件加密与数字信封功能,此压缩包中包括1个界面UI文件,3个业务逻辑代码文件,1个入口代码文件,希望大家看过后有所收获。
  • 提供获取加密证书接口、数字信封加密以及数字信封解密接口源码,IDEA编译,测试数据符合标准openssl,测试的时候要注意证书和私钥的存放路径
  • 基于数字证书的文件数字信封加解密工具(支持RSA算法与SM2算法)
  • 利用PKI(PublicKeyInfrastructure公钥基础设施)技术,以Windows2000为平台,在VisualBasic6.0开发环境下,使用加密应用程序接口CrytoAPI和CAPICOM,实现对信息传输过程中数据的数字签名和数字信封工作,详细介绍了数字...
  • 数字信封格式的使用,具体使用直接看代码即可。 注:PKCS7 标准的中数字信封使用OID,是国际标准的。本工程中使用的是中国标准的,所以修改了中的源码编译的。修改方法直接粗暴的把OBJ_pkcs7_enveloped 的国际标准...
  • 数字信封

    千次阅读 2019-03-28 19:09:44
    数字信封是将对称密钥通过非对称加密(即:有公钥和私钥两个)的结果分发对称密钥的方法。数字信封是实现信息完整性验证的技术。(数字信封技术使用两层加密体系。) 2.过程:信息发送方甲 信息接收方乙 甲通过加密...

    1.定义:

          数字信封是将对称密钥通过非对称加密(即:有公钥和私钥两个)的结果分发对称密钥的方法。数字信封是实现信息完整性验证的技术。(数字信封技术使用两层加密体系。)

    2.过程:信息发送方甲                                       信息接收方乙

    甲通过加密机获取对称密钥,利用对称密钥加密要发送的信息。再使用乙的公钥来加密对称密钥。这样就形成了一个数字信封 。

    乙通过自己的私钥将数字信封解开,从而获取对称密钥,在使用对称密钥解密信息。

    3.数字信封主要包括数字信封打包、数字信封拆解
    数字信封打包是使用对方的公钥将加密密钥进行加密的过程,只有对方的私钥才能将加密后的数据(通信密钥)还原。
    数字信封拆解是使用私钥将加密过的数据解密的过程。

    4.作用:

    数字信封和日程生活中的信封类似,都是用来指定接收方;还有一个作用就是保证信息传递过程中的机密性。

    5.实现:

    数字信封是使用数字证书实现的。因此要先申请数字证书,从而实现数字信封。

     

    参考链接:https://www.cnblogs.com/franson-2016/p/5520675.html

    展开全文
  • java数字信封

    2013-03-28 09:00:08
    java 数字信封 相关技术文档,描述了数字信封的过程和原理
  • C++实现数字信封

    2013-01-10 18:41:57
    c++实现数字信封技术,确保会话密钥的安全性
  • P7数字信封项目

    热门讨论 2012-09-07 17:12:55
    pkcs7数字信封,作为http://blog.csdn.net/yunnysunny/article/details/7899574 博客的配套附件。
  • PKI实验,实现数字证书的颁发和基于数字证书的双机认证,和数字信封的实现
  • sm2格式数字信封加解密详解

    千次阅读 热门讨论 2021-01-04 13:37:34
    sm2格式数字信封 0、参考链接 密码行业标准化技术委员会 http://www.gmbz.org.cn/main/bzlb.html SM2密码算法使用规范 http://www.gmbz.org.cn/main/viewfile/2018011001400692565.html SM2密码算法应用分析 ...

    sm2格式数字信封

    0、参考链接

    密码行业标准化技术委员会
    	http://www.gmbz.org.cn/main/bzlb.html
    SM2密码算法使用规范
    	http://www.gmbz.org.cn/main/viewfile/2018011001400692565.html
    SM2密码算法应用分析
    	https://blog.csdn.net/arlaichin/article/details/23708155?utm_source=itdadao&utm_medium=referral
    技术科普 | 国密算法在Ultrain区块链中的运用 
    	https://blog.csdn.net/Tramp_1/article/details/111603396
    

    1、sm2数字信封格式:

    有效部分
    公钥:04|X|Y,共65字节
    私钥:整数,共32字节
    SM2EnvelopedKey ::= SEQUENCE {
        symalgid        AlgorithmIdentifier,        -- 对称算法ID
        symalgkey       SM2Cipher,                  -- 对称算法密钥(被签名证书公钥加密)
        asympubkey      BIT STRING,                 -- 加密证书公钥
        asymprvkey      BIT STRING                  -- 加密证书私钥(被对称算法加密)
    }
    typedef struct SM2Cipher_st {
        ASN1_INTEGER *xCoordinate;                                // x分量(随机,非公钥)
        ASN1_INTEGER *yCoordinate;                                // y分量(随机,非公钥)
        ASN1_OCTET_STRING *hash;                                  // 杂凑值
        ASN1_OCTET_STRING *cipherText;                            // 密文
    } SM2Cipher;
    AlgorithmIdentifier ::= SEQUENCE {
        algorithm       OBJECT IDENTIFIER,
        parameters      ANY DEFINED BY algorithm OPTIONAL
    }
    
    区分普通的数字信封格式,见下图(openssl暂不支持sm2算法的私钥p7信封格式生成,但是支持sm2算法私钥的p7解密,生成p7可以在外部使用gmssl命令行生成)
    typedef struct pkcs7_enveloped_st {
        ASN1_INTEGER *version;      /* version 0 */
        STACK_OF(PKCS7_RECIP_INFO) *recipientinfo;
        PKCS7_ENC_CONTENT *enc_data;
    } PKCS7_ENVELOPE;
    typedef struct pkcs7_recip_info_st {
        ASN1_INTEGER *version;      /* version 0 */
        PKCS7_ISSUER_AND_SERIAL *issuer_and_serial;
        X509_ALGOR *key_enc_algor;
        ASN1_OCTET_STRING *enc_key;
        X509 *cert;                 /* get the pub-key from this */
        const PKCS7_CTX *ctx;
    } PKCS7_RECIP_INFO;
    typedef struct pkcs7_enc_content_st {
        ASN1_OBJECT *content_type;
        X509_ALGOR *algorithm;
        ASN1_OCTET_STRING *enc_data; /* [ 0 ] */
        const EVP_CIPHER *cipher;
        const PKCS7_CTX *ctx;
    } PKCS7_ENC_CONTENT;
    typedef struct pkcs7_st {
        /*
         * The following is non NULL if it contains ASN1 encoding of this
         * structure
         */
        unsigned char *asn1;
        long length;
    # define PKCS7_S_HEADER  0
    # define PKCS7_S_BODY    1
    # define PKCS7_S_TAIL    2
        int state;                  /* used during processing */
        int detached;
        ASN1_OBJECT *type;
        /* content as defined by the type */
        /*
         * all encryption/message digests are applied to the 'contents', leaving
         * out the 'type' field.
         */
        union {
            char *ptr;
            /* NID_pkcs7_data */
            ASN1_OCTET_STRING *data;
            /* NID_pkcs7_signed */
            PKCS7_SIGNED *sign;
            /* NID_pkcs7_enveloped */
            PKCS7_ENVELOPE *enveloped;
            /* NID_pkcs7_signedAndEnveloped */
            PKCS7_SIGN_ENVELOPE *signed_and_enveloped;
            /* NID_pkcs7_digest */
            PKCS7_DIGEST *digest;
            /* NID_pkcs7_encrypted */
            PKCS7_ENCRYPT *encrypted;
            /* Anything else */
            ASN1_TYPE *other;
        } d;
        PKCS7_CTX ctx;
    } PKCS7;
    

    在这里插入图片描述

    2、代码中sm2数字信封加密解密步骤

    加密(将加密私钥明文转换为sm2信封格式密文)
    1、将加密证书私钥转换为der格式(二进制)
    2、设置对称算法ID,公钥有效数据部分,私钥有效数据部分
    	对称算法ID默认为0x2a, 0x81, 0x1c, 0xcf, 0x55, 0x01, 0x68, 0x01(即sm4_ecb,1.2.156.10197.1.104.1)
    	公钥数据前缀为0xa1, 0x44, 0x03, 0x42, 0x00,截取65字节明文
    	私钥数据前缀为0x02, 0x01, 0x01, 0x04, 0x20,截取32字节明文
    3、创建对称密钥,加密私钥有效数据部分
    	使用sm4_ecb算法和创建的128位随机密钥,加密私钥32字节得到32字节密文
    4、使用签名公钥加密对称密钥,密文转换为二进制
    	使用sm2算法加密128位对称密钥,得到对称密钥密文(此处我使用了openssl已实现的sm2算法加密,因此不需要按照国标文档里深入底层计算预处理结果Za)
    5、将对称算法ID,对称密钥密文,公钥,私钥密文转换为信封格式数据(此处可以参考openssl内部代码实现结构体和i2d格式转换)
    6、将der二进制信封转换为pem格式(base64),输出
    
    解密(将sm2数字信封格式转换为加密私钥)
    1、p7(pem格式)转二进制
    2、解析二进制,得到对称算法ID,对称算法密钥密文,加密证书公钥,加密证书私钥密文二进制
    3、对称算法ID转具体算法名称
    	二进制字符串ID转换为OID(1.2.156.10197.1.104.1)进行匹配
    4、签名私钥解密,得到对称算法密钥
    	使用sm2算法解密对称密钥密文,得到对称密钥明文
    5、对称算法解密,得到加密私钥有效数据,32字节
    	使用sm4_ecb算法和对称密钥明文,解密私钥32字节密文得到32字节明文
    6、拼接公钥,私钥得到完整加密私钥der二进制格式,有两种方式(此处拼接方法是我自己创造的,有什么其他好方法欢迎共享)
    (1)"30770201010420"+32字节私钥+"a00a06082a811ccf5501822da144034200"+65字节公钥	(2)"308187020100301306072A8648CE3D020106082A811CCF5501822D046D306B0201010420"+32字节私钥+"A144034200"+65字节公钥
    7、转换der得到pem格式文件
    

    3、sm2数字信封格式详解

    p7pem格式(base64)
    MIHtMAkGByqBHM9VAWgweQIgMtHF6qRZOKJxnT5MYSv4eK/LjJHmp7b/p7AaP6cqigkCIQCFpr2MmakaMxVH1u+Yzxf+oJSFETwiZacB4j3NohlbHwQgO50Hic8tDYBLedIbuqsS2lXvPDYtyuLUrQKyGRI1Y9gEEA5lnd3Yxujfedxk6Cam9ygDQgAEnrxloYKoCRYc3Lh96OYupmT7V7X/BBgdcfCMQnsB7nQhD6FVwgKoN0JMwMqHXGg6l891FCfuTh5N51YqOAqBwwMhAHiB9UgemN+Xz39qsdMeVl4SKdmHHkPkKmNOBJjoqHor
    
    p7二进制
    3081ED300906072A811CCF5501683079022032D1C5EAA45938A2719D3E4C612BF878AFCB8C91E6A7B6FFA7B01A3FA72A8A0902210085A6BD8C99A91A331547D6EF98CF17FEA09485113C2265A701E23DCDA2195B1F04203B9D0789CF2D0D804B79D21BBAAB12DA55EF3C362DCAE2D4AD02B219123563D804100E659DDDD8C6E8DF79DC64E826A6F728034200049EBC65A182A809161CDCB87DE8E62EA664FB57B5FF04181D71F08C427B01EE74210FA155C202A837424CC0CA875C683A97CF751427EE4E1E4DE7562A380A81C30321007881F5481E98DF97CF7F6AB1D31E565E1229D9871E43E42A634E0498E8A87A2B
    
    主要包含(1)(2)(3)(4)
    
    3081ed30090607
    (1)对称算法ID:sms4		    			  			2a811ccf550168
    (2)对称算法密钥密文(sm2加密):								3079022032d1c5eaa45938a2719d3e4c612bf878afcb8c91e6a7b6ffa7b01a3fa72a8a0902210085a6bd8c99a91a331547d6ef98cf17fea09485113c2265a701e23dcda2195b1f04203b9d0789cf2d0d804b79d21bbaab12da55ef3c362dcae2d4ad02b219123563d804100e659dddd8c6e8df79dc64e826a6f728
    
    拆解后:
    30790220
    x:32d1c5eaa45938a2719d3e4c612bf878afcb8c91e6a7b6ffa7b01a3fa72a8a09
    022100
    y:85a6bd8c99a91a331547d6ef98cf17fea09485113c2265a701e23dcda2195b1f
    0420
    m:3b9d0789cf2d0d804b79d21bbaab12da55ef3c362dcae2d4ad02b219123563d8
    0410
    c:0e659dddd8c6e8df79dc64e826a6f728
    (c结构密文)
    04|x|y|m|c
    0432D1C5EAA45938A2719D3E4C612BF878AFCB8C91E6A7B6FFA7B01A3FA72A8A0985A6BD8C99A91A331547D6EF98CF17FEA09485113C2265A701E23DCDA2195B1F3B9D0789CF2D0D804B79D21BBAAB12DA55EF3C362DCAE2D4AD02B219123563D80E659DDDD8C6E8DF79DC64E826A6F728
    
    使用sm2签名私钥解密(2)后得到
    对称密钥明文:EP/+Xo55MBhI3e1GTyghhQ==:10FFFE5E8E79301848DDED464F282185
    (3)加密证书公钥:									  
    034200
    有效数据明文(65B):049ebc65a182a809161cdcb87de8e62ea664fb57b5ff04181d71f08c427b01ee74210fa155c202a837424cc0ca875c683a97cf751427ee4e1e4de7562a380a81c3
    (4)加密证书私钥(加密):
    032100
    有效数据密文(32B):7881f5481e98df97cf7f6ab1d31e565e1229d9871e43e42a634e0498e8a87a2b
    
    使用(2)中对称密钥解密得到sm2私钥有效数据明文
    cipher.txt.bin:7881f5481e98df97cf7f6ab1d31e565e1229d9871e43e42a634e0498e8a87a2b #需要将十六进制转换为二进制文件
    openssl enc -d -sm4-ecb -in cipher.txt.bin -K 10FFFE5E8E79301848DDED464F282185 -p -out plain.txt.bin #解密得到明文
    加密验证
    plain.txt.bin:71e49d78b44c6fd54331869f343c537c0a736954ae22cd50277ae587a7e6762e #需要将十六进制转换为二进制文件
    openssl enc -e -sm4-ecb -nopad -in plain.txt.bin  -K 10FFFE5E8E79301848DDED464F282185 -p -out cipher.txt.bin #使用明文加密得到
    
    
    加密证书公钥der:
    3059301306072a8648ce3d020106082a811ccf5501822d034200
    049ebc65a182a809161cdcb87de8e62ea664fb57b5ff04181d71f08c427b01ee74210fa155c202a837424cc0ca875c683a97cf751427ee4e1e4de7562a380a81c3
    
    加密证书私钥der(格式1):
    308187020100301306072A8648CE3D020106082A811CCF5501822D046D306B0201010420
    私钥有效数据  						71E49D78B44C6FD54331869F343C537C0A736954AE22CD50277AE587A7E6762E
    									A144034200
    公钥有效数据049EBC65A182A809161CDCB87DE8E62EA664FB57B5FF04181D71F08C427B01EE74210FA155C202A837424CC0CA875C683A97CF751427EE4E1E4DE7562A380A81C3
    
    加密证书私钥der(格式2):
    30770201010420
    私钥有效数据							71e49d78b44c6fd54331869f343c537c0a736954ae22cd50277ae587a7e6762e
    a00a06082a811ccf5501822d
    									a144034200													
    公钥有效数据					049ebc65a182a809161cdcb87de8e62ea664fb57b5ff04181d71f08c427b01ee74210fa155c202a837424cc0ca875c683a97cf751427ee4e1e4de7562a380a81c3
    
    展开全文
  • //添加数字信封 CMSTypedData msg = newCMSProcessableByteArray(srcMsg.getBytes(charSet)); CMSEnvelopedDataGenerator edGen= newCMSEnvelopedDataGenerator(); edGen.addRecipientInfoGenerator...

    importjava.io.FileInputStream;importjava.io.InputStream;importjava.security.KeyStore;importjava.security.PrivateKey;importjava.security.Provider;importjava.security.Security;importjava.security.cert.Certificate;importjava.security.cert.CertificateFactory;importjava.security.cert.X509Certificate;importjava.util.ArrayList;importjava.util.Collection;importjava.util.Iterator;importjava.util.List;importorg.bouncycastle.asn1.pkcs.PKCSObjectIdentifiers;importorg.bouncycastle.cert.X509CertificateHolder;importorg.bouncycastle.cert.jcajce.JcaCertStore;importorg.bouncycastle.cms.CMSEnvelopedData;importorg.bouncycastle.cms.CMSEnvelopedDataGenerator;importorg.bouncycastle.cms.CMSProcessableByteArray;importorg.bouncycastle.cms.CMSSignedData;importorg.bouncycastle.cms.CMSSignedDataGenerator;importorg.bouncycastle.cms.CMSTypedData;importorg.bouncycastle.cms.RecipientInformation;importorg.bouncycastle.cms.RecipientInformationStore;importorg.bouncycastle.cms.SignerInformation;importorg.bouncycastle.cms.SignerInformationStore;importorg.bouncycastle.cms.jcajce.JcaSignerInfoGeneratorBuilder;importorg.bouncycastle.cms.jcajce.JcaSimpleSignerInfoVerifierBuilder;importorg.bouncycastle.cms.jcajce.JceCMSContentEncryptorBuilder;importorg.bouncycastle.cms.jcajce.JceKeyTransEnvelopedRecipient;importorg.bouncycastle.cms.jcajce.JceKeyTransRecipientInfoGenerator;importorg.bouncycastle.jce.provider.BouncyCastleProvider;importorg.bouncycastle.operator.ContentSigner;importorg.bouncycastle.operator.jcajce.JcaContentSignerBuilder;importorg.bouncycastle.operator.jcajce.JcaDigestCalculatorProviderBuilder;importorg.bouncycastle.util.Store;importorg.bouncycastle.util.encoders.Base64;public classMessageUtil {private String ksType = "PKCS12";/*** 生成数字签名

    *@paramsrcMsg 源信息

    *@paramcharSet 字符编码

    *@paramcertPath 证书路径

    *@paramcertPwd 证书密码

    *@return

    */

    public byte[] signMessage(String srcMsg, String charSet, String certPath, String certPwd) {

    String priKeyName= null;char passphrase[] =certPwd.toCharArray();try{

    Provider provider= newBouncyCastleProvider();//添加BouncyCastle作为安全提供

    Security.addProvider(provider);//加载证书

    KeyStore ks =KeyStore.getInstance(ksType);

    ks.load(newFileInputStream(certPath), passphrase);if(ks.aliases().hasMoreElements()) {

    priKeyName=ks.aliases().nextElement();

    }

    Certificate cert=(Certificate) ks.getCertificate(priKeyName);//获取私钥

    PrivateKey prikey =(PrivateKey) ks.getKey(priKeyName, passphrase);

    X509Certificate cerx509=(X509Certificate) cert;

    List certList = new ArrayList();

    certList.add(cerx509);

    CMSTypedData msg= (CMSTypedData) newCMSProcessableByteArray(

    srcMsg.getBytes(charSet));

    Store certs= newJcaCertStore(certList);

    CMSSignedDataGenerator gen= newCMSSignedDataGenerator();

    ContentSigner sha1Signer= newJcaContentSignerBuilder("SHA1withRSA").setProvider("BC").build(prikey);

    gen.addSignerInfoGenerator(newJcaSignerInfoGeneratorBuilder(new JcaDigestCalculatorProviderBuilder().setProvider("BC")

    .build()).build(sha1Signer, cerx509));

    gen.addCertificates(certs);

    CMSSignedData sigData= gen.generate(msg, true);returnBase64.encode(sigData.getEncoded());

    }catch(Exception e) {

    e.printStackTrace();return null;

    }

    }/*** 验证数字签名

    *@paramsignedData

    *@return

    */

    public boolean signedDataVerify(byte[] signedData) {boolean verifyRet = true;try{//新建PKCS#7签名数据处理对象

    CMSSignedData sign = newCMSSignedData(signedData);//添加BouncyCastle作为安全提供

    Security.addProvider(neworg.bouncycastle.jce.provider.BouncyCastleProvider());//获得证书信息

    Store certs =sign.getCertificates();//获得签名者信息

    SignerInformationStore signers =sign.getSignerInfos();

    Collection c=signers.getSigners();

    Iterator it=c.iterator();//当有多个签名者信息时需要全部验证

    while(it.hasNext()) {

    SignerInformation signer=(SignerInformation) it.next();//证书链

    Collection certCollection =certs.getMatches(signer.getSID());

    Iterator certIt=certCollection.iterator();

    X509CertificateHolder cert=(X509CertificateHolder) certIt

    .next();//验证数字签名

    if (signer.verify(newJcaSimpleSignerInfoVerifierBuilder()

    .setProvider("BC").build(cert))) {

    verifyRet= true;

    }else{

    verifyRet= false;

    }

    }

    }catch(Exception e) {

    verifyRet= false;

    e.printStackTrace();

    System.out.println("验证数字签名失败");

    }returnverifyRet;

    }/*** 加密数据

    *@paramsrcMsg 源信息

    *@paramcertPath 证书路径

    *@paramcharSet 字符编码

    *@return*@throwsException*/

    public String envelopeMessage(String srcMsg, String certPath, String charSet) throwsException {

    CertificateFactory certificatefactory;

    X509Certificate cert;//使用公钥对对称密钥进行加密//若此处不加参数 "BC" 会报异常:CertificateException -

    certificatefactory = CertificateFactory.getInstance("X.509", "BC");//读取.crt文件;你可以读取绝对路径文件下的crt,返回一个InputStream(或其子类)即可。

    InputStream bais = newFileInputStream(certPath);

    cert=(X509Certificate) certificatefactory.generateCertificate(bais);//添加数字信封

    CMSTypedData msg = newCMSProcessableByteArray(srcMsg.getBytes(charSet));

    CMSEnvelopedDataGenerator edGen= newCMSEnvelopedDataGenerator();

    edGen.addRecipientInfoGenerator(newJceKeyTransRecipientInfoGenerator(

    cert).setProvider("BC"));

    CMSEnvelopedData ed=edGen.generate(msg,newJceCMSContentEncryptorBuilder(PKCSObjectIdentifiers.rc4)

    .setProvider("BC").build());

    String rslt= newString(Base64.encode(ed.getEncoded()));

    System.out.println(rslt);returnrslt;

    }/*** 解密数据

    *@paramencode 加密后的密文

    *@paramcertPath 证书路径

    *@paramcertPwd 证书密码

    *@paramcharSet 字符编码

    *@return*@throwsException*/

    public String openEnvelope(String encode, String certPath, String certPwd, String charSet) throwsException {//获取密文

    CMSEnvelopedData ed = newCMSEnvelopedData(Base64.decode(encode.getBytes()));

    RecipientInformationStore recipients=ed.getRecipientInfos();

    Collection c=recipients.getRecipients();

    Iterator it=c.iterator();//加载证书

    KeyStore ks =KeyStore.getInstance(ksType);

    ks.load(newFileInputStream(certPath), certPwd.toCharArray());

    String priKeyName= null;if(ks.aliases().hasMoreElements()) {

    priKeyName=ks.aliases().nextElement();

    }//获取私钥

    PrivateKey prikey =(PrivateKey) ks.getKey(priKeyName, certPwd.toCharArray());byte[] recData = null;//解密

    if(it.hasNext()) {

    RecipientInformation recipient=(RecipientInformation) it.next();

    recData= recipient.getContent(newJceKeyTransEnvelopedRecipient(

    prikey).setProvider("BC"));

    }return newString(recData, charSet);

    }publicMessageUtil() {

    Security.addProvider(neworg.bouncycastle.jce.provider.BouncyCastleProvider());

    }

    }

    展开全文
  • 概述 数字信封综合运用了对称加密和非对称加密的技术。 原理 信是对称加密的密钥,数字信封

    概述

    一般来说对称加密算法的密钥短,加密算法简单,适用于大量数据加密的场合,在现在的技术条件下比较容易破解;相比较而言非对称加密的密钥长,加解密算法复杂,很难破解,比较耗时,不适用于加密大量数据。
    但是实际应用中传输大量数据的场景是比较多的,对于对称加密来说,两方进行数据传输最难解决的就是密钥的同步问题。如果一直使用同一个密钥进行加解密,那样被攻击者找到规律很容易被破解;如果定期更换密钥,发送方和接收方就要定期进行密钥同步,一方面比较麻烦,另一方面处理不好就会出现密钥泄露的情况。
    数字信封解决了对称密钥传输的问题。结合了对称加密和非对称加密,使用对称加密技术来对大量数据进行加密,使用非对称加密技术将对称密钥进行加密。

    原理

    本质是使用对称加密加密数据,非对称加密加密对称密钥。
    数字信封将数据的传输分为两部分“信”和“信封”,对称加密的密钥信封对此密钥进行非对称加密

    过程

    假设在此之前B已经收到A通过密钥K加密后的密文,但没有密钥无法获得明文。
    发送方A使用B的公钥将对称密钥K进行加密,形成数字信封,并将此数据信封发送给B;B接收到后使用自身私钥将信封解密获得对称密钥K,然后使用对称密钥K将之前收到的密文解密,获得明文数据。

    接收方B
    发送方A
    非对称加密
    非对称解密
    传输
    对称密钥K
    信封
    信封
    对称密钥K

    结束

    展开全文
  • https://blog.csdn.net/xuke6677/article/details/8516312?utm_medium=distribute.pc_relevant.none-task-blog-OPENSEARCH-3.control&dist_request_id=&...数字信封使用的是接收者的密钥对,用.
  • PKCS7带签名的数字信封两种不同方法进行解密
  • 摘要算法与数字签名和数字信封

    千次阅读 2021-12-01 15:24:26
    摘要算法与数字签名和数字信封
  • 密码学实验(全部题目+完整代码:Hash算法MD5,DES-CBC,基于口令的加密,CBC-MAC,数字信封, 数字签名,DH)
  • 数字签名和数字信封

    2020-06-24 18:33:14
    数字签名和数字信封一级目录二级目录三级目录 一级目录 二级目录 三级目录
  • 发送方把原始明文和数字签名一起发给接收方,接收方用发送方公钥对数字签名解密,得到数字摘要同时对明文使用相同Hash产生数字摘要,将两个数字摘要进行对比,两者一致则说明信息没有被破坏 存在的问题 接收方存储...
  • 数字信封原理

    2019-04-16 11:23:03
    数字信封是指发送方使用接收方的公钥来加密对称密钥后所得的数据,其目的是用来确保对称密钥传输的安全性。采用数字信封时,接收方需要使用自己的私钥才能打开数字信封得到对称密钥。 数字信封的加/解密过程如图所...
  • 题目详见:系统安全课设实验五 代码框架一览(非完整...// _Digital_Envelope 类体设计,数字信封 // 2019.06.06 // Coded By YI MENG // // 把十六进制、十、二进制弄到这里来 #include <string> #includ...
  • B拿到数据后使用自己的私钥解密数字信封,得到对称密钥DES,再使用DES解密信息; 使用A的公钥对数字签名进行验签,得到摘要,使用摘要算法对明文进行摘要,对比两个摘要;确认信息是否被篡改;
  • 数字信封的加解密,常见不安全算法和推荐强密码算法
  • 数字信封加解密(RSA+AES)

    千次阅读 2020-07-21 15:29:03
    /*** * @ClassName: EncryptUtils * @Description: 数字信封加密工具类 * @Auther: hu_yangyang * @Date: 2020/6/11 11:18 */ public class EncryptUtils { //用于封装随机产生的公钥与私钥 private static Map, ...
  • 密钥托管通过保存用户的解密私钥备份,用以满足特定的商业需求和政府机构的...在一个数字信封应用中,发现偶然性的RSA解密失败问题。该问题涉及到多家软件或硬件厂商。利用密钥托管技术,快速查明了问题产生的原因。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 7,254
精华内容 2,901
关键字:

数字信封

友情链接: MASTER_RWOK_07131900.rar