精华内容
下载资源
问答
  • java使用itext为pdf文件设置密码保护
    2021-03-01 06:13:55

    下面是编程之家 jb51.cc 通过网络收集整理的代码片段。

    编程之家小编现在分享给大家,也给大家做个参考。

    package com.open.pdf;

    import java.io.File;

    import java.io.FileOutputStream;

    import java.io.OutputStream;

    import java.util.Date;

    import com.itextpdf.text.Document;

    import com.itextpdf.text.Paragraph;

    import com.itextpdf.text.pdf.PdfWriter;

    public class GeneratePDF {

    private static String USER_PASS = "Hello123";

    private static String OWNER_PASS = "Owner123";

    public static void main(String[] args) {

    try {

    OutputStream file = new FileOutputStream(new File("D:\\Test.pdf"));

    Document document = new Document();

    PdfWriter writer = PdfWriter.getInstance(document,file);

    writer.setEncryption(USER_PASS.getBytes(),OWNER_PASS.getBytes(),PdfWriter.ALLOW_PRINTING,PdfWriter.ENCRYPTION_AES_128);

    document.open();

    document.add(new Paragraph("Hello World,iText"));

    document.add(new Paragraph(new Date().toString()));

    document.close();

    file.close();

    } catch (Exception e) {

    e.printStackTrace();

    }

    }

    }

    以上是编程之家(jb51.cc)为你收集整理的全部代码内容,希望文章能够帮你解决所遇到的程序开发问题。

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    总结

    如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

    本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

    如您喜欢交流学习经验,点击链接加入交流1群:1065694478(已满)交流2群:163560250

    更多相关内容
  • 提供获取加密证书接口、数字信封加密以及数字信封解密接口源码,IDEA编译,测试数据符合标准openssl,测试的时候要注意证书和私钥的存放路径
  • java数字信封

    2013-03-28 09:00:08
    java 数字信封 相关技术文档,描述了数字信封的过程和原理
  • System.out.println(" 将数字信封和密文组装后的报文 16进制格式:" + hexencode); System.out.println("发送方数据加密完成,可以将数据发送出去 "); /** ***************************************************** ...

    /**

    *

    * sender

    *

    * EOS8g1u3ktAGHs4QsVp9aeaWNebFLtprQHwpaSjegx6iEuoTNhjXU

    * 5KTZYCDdcfNrmEpcf97SJBCtToZjYHjHm8tqTWvzUbsUJgkxcfk

    *

    * receiver 平台公私钥对

    *

    * EOS7ez2gagfoXw9XdW3kRx3EsCoWvupGR6u6ZJhFPEe9Q12V8JgUL

    * 5JUrqxYcssR9LLVtWDeQcc9HCX4FEqBG7d9GW6t7mvmB1rUuZr9

    *

    * receiver 省侧公私钥对

    * EOS5WMHqw6jDDBPBm7JXTHemAwtSo2tp93pRysJMRhiT1zUYb24vL

    * 5HrcVeuHHNwHsivrMoJ9XvU6EM7Q2wQ2ECiy8GeoiuamhNiSuZq

    */

    // 1. 调用钱包获取 发送方私钥

    String senderPrivateKey = "5KTZYCDdcfNrmEpcf97SJBCtToZjYHjHm8tqTWvzUbsUJgkxcfk";

    EosPrivateKey senderECPrivateKey = new EosPrivateKey(senderPrivateKey);

    // EosPublicKey senderECPublicKey = new EosPublicKey(senderPublicKey);

    // 2. 根据私钥 生成公钥。 或者直接根据公钥 调用钱包获取私钥。 都可以,看具体业务需求

    EosPublicKey senderECPublicKey = senderECPrivateKey.getPublicKey();

    String senderPublicKey = senderECPublicKey.toString();

    /**

    * 调用钱包获取 接收方私钥 获取公私钥方式 根据业务需求确定。

    * 1. 可以根据公钥,从钱包里获取私钥

    * 2. 也可以直接从钱包里取出私钥,反向生成公钥

    */

    String receiverPrivateKey = "5JUrqxYcssR9LLVtWDeQcc9HCX4FEqBG7d9GW6t7mvmB1rUuZr9";

    EosPrivateKey receiverECPrivateKey = new EosPrivateKey(receiverPrivateKey);

    EosPublicKey receiverECPublicKey = receiverECPrivateKey.getPublicKey();

    /**

    * 生成对称密钥

    */

    byte[] nonce = new byte[16];

    MTRandom random=new MTRandom();

    random.nextBytes(nonce);

    // 待加密 数据

    byte[] params = "{\"age\": 1,\"汉字\":\"为初始化向量,可以使用固定值,\",\"12345\":\"24qqwazzxdtttdxkaskjewuizckczxnlsdosasda4!!!@#$$%^&&*(()(^#\"}".getBytes("utf8");

    System.out.println("加密前原始数据: " + new String(params,"utf8"));

    // 发起方使用对称密钥,对原始数据进行加密

    byte[] encryptedData = null;

    try {

    encryptedData = CryptUtil.aesEncryptWithNOIV(nonce,params);

    } catch (InvalidCipherTextException e) {

    e.printStackTrace();

    System.out.println(" do something!!!!");

    }

    System.out.println("加密后数据: " + HexUtils.toHex(encryptedData));

    System.out.println("加密前对称密钥: " + HexUtils.toHex(nonce));

    // 发起方使用 接收方公钥,对对称密钥进行加密

    byte[] encryptedKey = null;

    try {

    encryptedKey = ECCUtil.publicEncrypt(nonce,receiverECPublicKey.getECPublicKey());

    } catch (Exception e) {

    e.printStackTrace();

    System.out.println(" do something!!!!");

    }

    System.out.println("加密后对称密钥: " + HexUtils.toHex(encryptedKey));

    // 将对称密钥加密后的数据,密文组装后,进行网络传输。

    // 组装 demo

    /**

    * 4 byte | encryptedKey | 4 byte | encryptedData

    * 对称密钥加密后的数据长度 | ECC 加密后的对称秘钥 | 密文数据长度 | AES 加密后的密文

    */

    ByteBuffer bytebuffer = ByteBuffer.allocate( 4 + encryptedKey.length + 4 +encryptedData.length);

    bytebuffer.putInt(encryptedKey.length);

    bytebuffer.put(encryptedKey);

    bytebuffer.putInt(encryptedData.length);

    bytebuffer.put(encryptedData);

    // String base58encode = Base58.encode(bytebuffer.array());

    // System.out.println("base58 编码后的: " + base58encode);

    // 进行 16 进制编码

    String hexencode = HexUtils.toHex(bytebuffer.array());

    System.out.println(" 将数字信封和密文组装后的报文 16进制格式:" + hexencode);

    System.out.println("发送方数据加密完成,可以将数据发送出去 ");

    /**

    ***************************************************** 以下为接收方 代码 *************************************

    */

    // byte[] base58decode = Base58.decode(hexencode);

    byte[] hexdecode = HexUtils.toBytes(hexencode);

    ByteBuffer receiveBuffer = ByteBuffer.wrap(hexdecode);

    // 获取到对称秘钥长度

    int receivedEncryptedKeyLength = receiveBuffer.getInt();

    // 加密后的对称密钥key

    byte[] receivedEncryptKey = new byte[receivedEncryptedKeyLength];

    receiveBuffer.get(receivedEncryptKey,0,receivedEncryptedKeyLength);

    System.out.println(" 接收到的 加密后的对称密钥 :" + HexUtils.toHex(receivedEncryptKey));

    // 获取到的 密文的长度

    int contextLength = receiveBuffer.getInt();

    // 密文

    byte[] receivedEncryptContext = new byte[contextLength];

    receiveBuffer.get(receivedEncryptContext,0,contextLength);

    System.out.println(" 接收到的 密文:" + HexUtils.toHex(receivedEncryptContext));

    // 使用接收方私钥,解密对称密钥

    byte[] receiveddecryptKey = null;

    try {

    receiveddecryptKey = ECCUtil.privateDecrypt(receivedEncryptKey,receiverECPrivateKey.getECPrivateKey());

    } catch (Exception e) {

    e.printStackTrace();

    System.out.println(" do something!!!!");

    }

    System.out.println(" 解密后的对称密钥 :" + HexUtils.toHex(receiveddecryptKey));

    // 使用对称密钥,对密文进行解密

    try {

    byte[] plainText = CryptUtil.aesDecryptWithNOIV(receiveddecryptKey,receivedEncryptContext);

    // 解密后数据

    System.out.println("解密后数据 : "+new String(plainText, "utf8"));

    } catch (InvalidCipherTextException e) {

    e.printStackTrace();

    System.out.println(" do something!!!!");

    }

    展开全文
  • importjava.io.FileInputStream;importjava.io.InputStream;importjava.security.KeyStore;importjava.security.PrivateKey;importjava.security.Provider;importjava.security.Security;importjava.security.cert.C...

    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());

    }

    }

    展开全文
  • System.out.println(" 将数字信封和密文组装后的报文 16进制格式:" + hexencode); System.out.println("发送方数据加密完成,可以将数据发送出去 "); /** ***************************************************** ...

    /**

    *

    * sender

    *

    * EOS8g1u3ktAGHs4QsVp9aeaWNebFLtprQHwpaSjegx6iEuoTNhjXU

    * 5KTZYCDdcfNrmEpcf97SJBCtToZjYHjHm8tqTWvzUbsUJgkxcfk

    *

    * receiver 平台公私钥对

    *

    * EOS7ez2gagfoXw9XdW3kRx3EsCoWvupGR6u6ZJhFPEe9Q12V8JgUL

    * 5JUrqxYcssR9LLVtWDeQcc9HCX4FEqBG7d9GW6t7mvmB1rUuZr9

    *

    * receiver 省侧公私钥对

    * EOS5WMHqw6jDDBPBm7JXTHemAwtSo2tp93pRysJMRhiT1zUYb24vL

    * 5HrcVeuHHNwHsivrMoJ9XvU6EM7Q2wQ2ECiy8GeoiuamhNiSuZq

    */

    // 1. 调用钱包获取 发送方私钥

    String senderPrivateKey = "5KTZYCDdcfNrmEpcf97SJBCtToZjYHjHm8tqTWvzUbsUJgkxcfk";

    EosPrivateKey senderECPrivateKey = new EosPrivateKey(senderPrivateKey);

    // EosPublicKey senderECPublicKey = new EosPublicKey(senderPublicKey);

    // 2. 根据私钥 生成公钥。 或者直接根据公钥 调用钱包获取私钥。 都可以,看具体业务需求

    EosPublicKey senderECPublicKey = senderECPrivateKey.getPublicKey();

    String senderPublicKey = senderECPublicKey.toString();

    /**

    * 调用钱包获取 接收方私钥 获取公私钥方式 根据业务需求确定。

    * 1. 可以根据公钥,从钱包里获取私钥

    * 2. 也可以直接从钱包里取出私钥,反向生成公钥

    */

    String receiverPrivateKey = "5JUrqxYcssR9LLVtWDeQcc9HCX4FEqBG7d9GW6t7mvmB1rUuZr9";

    EosPrivateKey receiverECPrivateKey = new EosPrivateKey(receiverPrivateKey);

    EosPublicKey receiverECPublicKey = receiverECPrivateKey.getPublicKey();

    /**

    * 生成对称密钥

    */

    byte[] nonce = new byte[16];

    MTRandom random=new MTRandom();

    random.nextBytes(nonce);

    // 待加密 数据

    byte[] params = "{\"age\": 1,\"汉字\":\"为初始化向量,可以使用固定值,\",\"12345\":\"24qqwazzxdtttdxkaskjewuizckczxnlsdosasda4!!!@#$$%^&&*(()(^#\"}".getBytes("utf8");

    System.out.println("加密前原始数据: " + new String(params,"utf8"));

    // 发起方使用对称密钥,对原始数据进行加密

    byte[] encryptedData = null;

    try {

    encryptedData = CryptUtil.aesEncryptWithNOIV(nonce,params);

    } catch (InvalidCipherTextException e) {

    e.printStackTrace();

    System.out.println(" do something!!!!");

    }

    System.out.println("加密后数据: " + HexUtils.toHex(encryptedData));

    System.out.println("加密前对称密钥: " + HexUtils.toHex(nonce));

    // 发起方使用 接收方公钥,对对称密钥进行加密

    byte[] encryptedKey = null;

    try {

    encryptedKey = ECCUtil.publicEncrypt(nonce,receiverECPublicKey.getECPublicKey());

    } catch (Exception e) {

    e.printStackTrace();

    System.out.println(" do something!!!!");

    }

    System.out.println("加密后对称密钥: " + HexUtils.toHex(encryptedKey));

    // 将对称密钥加密后的数据,密文组装后,进行网络传输。

    // 组装 demo

    /**

    * 4 byte | encryptedKey | 4 byte | encryptedData

    * 对称密钥加密后的数据长度 | ECC 加密后的对称秘钥 | 密文数据长度 | AES 加密后的密文

    */

    ByteBuffer bytebuffer = ByteBuffer.allocate( 4 + encryptedKey.length + 4 +encryptedData.length);

    bytebuffer.putInt(encryptedKey.length);

    bytebuffer.put(encryptedKey);

    bytebuffer.putInt(encryptedData.length);

    bytebuffer.put(encryptedData);

    // String base58encode = Base58.encode(bytebuffer.array());

    // System.out.println("base58 编码后的: " + base58encode);

    // 进行 16 进制编码

    String hexencode = HexUtils.toHex(bytebuffer.array());

    System.out.println(" 将数字信封和密文组装后的报文 16进制格式:" + hexencode);

    System.out.println("发送方数据加密完成,可以将数据发送出去 ");

    /**

    ***************************************************** 以下为接收方 代码 *************************************

    */

    // byte[] base58decode = Base58.decode(hexencode);

    byte[] hexdecode = HexUtils.toBytes(hexencode);

    ByteBuffer receiveBuffer = ByteBuffer.wrap(hexdecode);

    // 获取到对称秘钥长度

    int receivedEncryptedKeyLength = receiveBuffer.getInt();

    // 加密后的对称密钥key

    byte[] receivedEncryptKey = new byte[receivedEncryptedKeyLength];

    receiveBuffer.get(receivedEncryptKey,0,receivedEncryptedKeyLength);

    System.out.println(" 接收到的 加密后的对称密钥 :" + HexUtils.toHex(receivedEncryptKey));

    // 获取到的 密文的长度

    int contextLength = receiveBuffer.getInt();

    // 密文

    byte[] receivedEncryptContext = new byte[contextLength];

    receiveBuffer.get(receivedEncryptContext,0,contextLength);

    System.out.println(" 接收到的 密文:" + HexUtils.toHex(receivedEncryptContext));

    // 使用接收方私钥,解密对称密钥

    byte[] receiveddecryptKey = null;

    try {

    receiveddecryptKey = ECCUtil.privateDecrypt(receivedEncryptKey,receiverECPrivateKey.getECPrivateKey());

    } catch (Exception e) {

    e.printStackTrace();

    System.out.println(" do something!!!!");

    }

    System.out.println(" 解密后的对称密钥 :" + HexUtils.toHex(receiveddecryptKey));

    // 使用对称密钥,对密文进行解密

    try {

    byte[] plainText = CryptUtil.aesDecryptWithNOIV(receiveddecryptKey,receivedEncryptContext);

    // 解密后数据

    System.out.println("解密后数据 : "+new String(plainText, "utf8"));

    } catch (InvalidCipherTextException e) {

    e.printStackTrace();

    System.out.println(" do something!!!!");

    }

    展开全文
  • P7数字信封项目

    热门讨论 2012-09-07 17:12:55
    pkcs7数字信封,作为http://blog.csdn.net/yunnysunny/article/details/7899574 博客的配套附件。
  • 一、程序逻辑加密-上传浏览器发起A用户的上传请求服务端...对上传文件进行SM4加密得到密文M’,发给服务端服务端保存密文M’以及会话密钥Ks二、技术实现2.1 密钥传输部分(步骤1-3)SM2证书解析首先测试浏览器端加密...
  • 数字信封格式的使用,具体使用直接看代码即可。 注:PKCS7 标准的中数字信封使用OID,是国际标准的。本工程中使用的是中国标准的,所以修改了中的源码编译的。修改方法直接粗暴的把OBJ_pkcs7_enveloped 的国际标准...
  • PKCS7的数字信封格式分为两种:带签名的数字信封和不带签名的数字信封。由于这个数字信封的生成过程比较复杂,所以这两种格式比较容易记混,导致都搞不清楚一个数字信封里面到底是存储的什么内容了。下面我就详细的...
  • 相比于以前的实现方式,处理了文件超过堆...上期的数字信封SM4工具类如果文件太大会报 OutOfMemoryError: Java heap space 内存溢出 以前的实现方法: 一次性将文件中的字节都读出来,直接一次性加密。但是忽略了一点...
  • 国密规范及Java软算法实现 SM2&SM3;&SM4;国密规范及Java软算法实现
  • 类似数字签名,数字信封是这样描述的:  数字信封   数字信封用加密技术来保证只有特定的收信人才能阅读信的内容。  流程:   信息发送方采用对称密钥来加密信息,然后再用接收方的公钥来加密此对称密钥...
  • 先解释一下什么是数字信封: 将对称密钥通过非对称加密(即:有公钥和私钥两个)的结果分发对称密钥的方法。大白话讲: 用对称秘钥对文件或字节加密,然后用非对称秘钥对对称秘钥的钥匙进行加密. 这里再解释一下对称秘钥...
  • 国密算法Java实现(含详细测试代码) 我自己按照国密文档通过Java实现SM2密码算法加密/解密、签名验签,SM3密码杂凑算法,SM4分组密码算法ECB、CBC模式加密/解密。 经过详尽的测试过后没有发现问题,但建议大家在...
  • 题目详见:系统安全课设实验五 代码框架一览(非完整...// _Digital_Envelope 类体设计,数字信封 // 2019.06.06 // Coded By YI MENG // // 把十六进制、十、二进制弄到这里来 #include <string> #includ...
  • 密码学数字信封的介绍

    千次阅读 2020-10-15 14:54:33
    采用数字信封技术后,即使加密文件被他人非法截获,因为截获者无法得到发送方的通信密钥,故不可能对文件进行解密。 数字信封的功能类似于普通信封。普通信封在法律的约束下保证只有收信人才能阅读信的内容; 数字...
  • 以十六进制字符显示密文,中文亦可实现,(GUI界面类及加密解密实现类)
  • 接上篇的加密、加签、数字信封应用的过程原理,这回是实际应用在vue与后台java的数据交互当中。必要性的问题就不过多说明了,毕竟谁也不希望自己的一些敏感信息在网上裸奔。 下面就是具体的实现实现思路及具体...
  • 数字信封完整过程图

    2007-09-06 15:05:37
    数字信封完整过程图 网络安全 格式:bmp 大小:1.37M
  • 数字信封的生成及解析

    千次阅读 2017-07-07 10:37:20
    2.将p10文件拿去ca进行申请,会得到:sig cert、enc cert、enc key(存在于数字信封中) 3.随机生成一个对称密钥symmetric key(这个对称密钥是16位的,可能是AES\SM4\SM1\等) 4.symmetric key + enc key 形成 ...
  • 数字信封加解密(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, ...
  • 实际上,在一次信息传送过程中,可以综合利用消息加密、数字信封、散列函数和数字签名实现安全性、完整性、可鉴别性和不可否认.具体过程如下:(1)发送方A①求明文消息的消息散列值:hA=H'(M);②发送方用自己的私钥KSA对...
  • 背景:与第三方交互经常会使用加密、验签等安全策略。...对称加密和非对称加密使用的Key不一致,所以要分开封装对称加密、非对称加密、数字信封。 分别封装对称加密和非对称加密后,再将两者合并为数字信封
  • 国密算法SM2-java实现

    2021-12-06 14:28:37
    Maven依赖 <dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId>...import java.math.BigInteger; public class Util {
  • ##数字签名流程 (1)生成签名:对源文件的「数字摘要」,使用私钥加密,生成「加密数字摘要」;(2)验证签名:对「加密数字摘要」通过公钥进行解密,生成「数字摘要2」,比较「数字摘要」与「数字摘要2」,结果相同则...
  • Java加解密与数字签名

    2016-09-04 18:24:35
    http://toutiao.com/a6324067182444642561/?tt_from=mobile_qq&utm_campaign=client_share&app=news_article&utm_source=mobile_qq&iid=5201487904&utm_medium=toutiao_ios
  • 最近项目上正好用到了Bouncy Castle,用于生成数字签名、数字信封,去网上找了很久,都没有找到合适的案例,而Bouncy Castle本身的文档也不多,最有用的就是官网上的Java Doc文档,因为这个问题也困扰了我好几天,...
  • 以下所有java接口全是小编封装: 获取对称密钥及对称加解密 获取哈希值及获取哈希算法...本地证书实现数字信封加解密 本地证书签名验签 获取证书和证书信息以及检测证书是否有效 不懂可私信小编,谢谢。 ...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 1,533
精华内容 613
关键字:

java实现数字信封

java 订阅