日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程语言 > c/c++ >内容正文

c/c++

openssl c++实现bouncycastle中AES加解密

發(fā)布時(shí)間:2024/7/23 c/c++ 41 豆豆
生活随笔 收集整理的這篇文章主要介紹了 openssl c++实现bouncycastle中AES加解密 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

0x01 為什么要用bouncycastle


先說說JCE(Java Cryptography Extension)是一組包,它們提供用于加密、密鑰生成和協(xié)商以及 Message Authentication Code(MAC)算法的框架和實(shí)現(xiàn)。
它提供對(duì)對(duì)稱、不對(duì)稱、塊和流密碼的加密支持,它還支持安全流和密封的對(duì)象。它不對(duì)外出口,用它開發(fā)完成封裝后將無法調(diào)用。由于美國(guó)出口控制規(guī)定,JCA是可出口的,但是JCE對(duì)部分國(guó)家是限制出口的。因此,要實(shí)現(xiàn)一個(gè)完整的安全結(jié)構(gòu),就需要一個(gè)活多個(gè)第三方廠商提供JCE產(chǎn)品,稱為安全供應(yīng)商。bouncycastle JCE就是其中一個(gè)安全供應(yīng)者。

舉個(gè)例子:

在向一個(gè)國(guó)際CA發(fā)送簽名請(qǐng)求后,CA會(huì)返回PKCS12格式的個(gè)人信息交換文件(.p12,.pfx)。此時(shí)使用sun自帶的提供者(provider)進(jìn)行讀取產(chǎn)生私鑰信息(keystore)時(shí),

KeyStore ks = KeyStore.getInstance("PKCS12", "SUN");ks.load(new FileInputStream("visa.p12"), "password".toCharArray());
可能(只是可能)會(huì)拋出

java.io.IOException: unsupported PKCS12 bag type 1.2.840.113549.1.12.10.1.1at com.sun.net.ssl.internal.ssl.PKCS12KeyStore.a(Unknown Source)at com.sun.net.ssl.internal.ssl.PKCS12KeyStore.engineLoad(Unknown Source)at java.security.KeyStore.load(Unknown Source)
這種情況就需要選用bouncycastle第三方完成讀取產(chǎn)生私鑰信息。


0x02 如何在JAVA環(huán)境中使用


第一步,首先到https://bouncycastle.org/latest_releases.html下載對(duì)應(yīng)的jar包,我這里下載是bcprov-jdk14-143.jar


第二步,將bcprov-jdk14-143.jar拷貝到%JAVA_HOME%/jre1.8.0_60/lib/ext/目錄下,并修改java_security文件


第三步,在eclipse中創(chuàng)建java工程


按向?qū)?chuàng)建





第四步,引入provider類名并注冊(cè)使用

import org.bouncycastle.jce.provider.*; Security.insertProviderAt((Provider)new BouncyCastleProvider(), 1);is = new BufferedInputStream(new FileInputStream(crypt12FileEnc));int length = is.available();System.out.println("length:" + length); cipher = Cipher.getInstance("AES/GCM/NoPadding", "BC"); cipher.init(Cipher.DECRYPT_MODE, new SecretKeySpec(aesK, "AES"), new IvParameterSpec(aesIV)); isCipher = new CipherInputStream(is, cipher);os = new FileOutputStream(decryptedZlibFile);int templen = 0;while((read=isCipher.read(buffer))!=-1) { templen += read;System.out.println("read:" + read);os.write(buffer, 0, read); }System.out.println("allread:" + templen);os.close();is.close();
這個(gè)時(shí)候,可能會(huì)報(bào)java異常

exception:Illegal key size java.security.InvalidKeyException: Illegal key sizeat javax.crypto.Cipher.checkCryptoPerm(Cipher.java:1039)at javax.crypto.Cipher.init(Cipher.java:1393)at javax.crypto.Cipher.init(Cipher.java:1327)at crypt12.main(crypt12.java:81)


這個(gè)時(shí)候美帝限制出口導(dǎo)致的,沒關(guān)系我們?nèi)ハ螺d無限制的策略文件local_policy.jar和US_export_policy.jar替換jdk和jre下的兩個(gè)j相同名字的ar包

  • jdk對(duì)應(yīng)jar包的路徑:D:\Java\jdk1.8.0_60\jre\lib\security
  • jre對(duì)應(yīng)jar包的路徑:D:\Java\jre1.8.0_60\lib\security

我這里是jdk8,所以對(duì)應(yīng)的下載
地址:

http://www.oracle.com/technetwork/java/javase/downloads/jce8-download-2133166.html

當(dāng)然還有其他版本的:

jdk 5: http://www.oracle.com/technetwork/java/javasebusiness/downloads/java-archive-downloads-java-plat-419418.html#jce_policy-1.5.0-oth-JPR
jdk6: http://www.oracle.com/technetwork/java/javase/downloads/jce-6-download-429243.html


0x03 如何用openssl實(shí)現(xiàn)AES加解密


在openssl中EVP_CIPHER的使用跟java里面Cipher的使用及其相似,真懷疑是不是相互有借鑒。但要注意EVP_CIPHER_CTX_ctrl的使用是不可或缺的,在加解密中若忽略此函數(shù)的使用,會(huì)直接導(dǎo)致加解密失敗,使用方法如下:

#define BUFFERSIZE 8192

EVP_CIPHER_CTX ctx;const EVP_CIPHER *cipher = EVP_aes_256_gcm();EVP_CIPHER_CTX_init(&ctx);EVP_CIPHER_CTX_set_padding(&ctx, 0);EVP_DecryptInit_ex(&ctx, cipher, NULL, NULL, NULL);EVP_CIPHER_CTX_ctrl(&ctx, EVP_CTRL_GCM_SET_IVLEN, 16, NULL);EVP_DecryptInit_ex(&ctx, NULL, NULL, (unsigned char*)aesK, (unsigned char*)aesIV);int index = 0;std::ofstream zlibOfs(zlibFile.c_str(), std::ios::binary);while (needCryLen > 0){memset(buffer, 0, BUFFERSIZE);memcpy_s(buffer, BUFFERSIZE, cryBuffer + BUFFERSIZE * index, needCryLen <= BUFFERSIZE ? needCryLen - 20 : BUFFERSIZE);int outLen = 0;int decryOutLen = 0;EVP_DecryptUpdate(&ctx, (unsigned char*)outBuffer, &outLen, (unsigned char*)buffer, needCryLen <= BUFFERSIZE ? needCryLen - 20 : BUFFERSIZE);decryOutLen += outLen;EVP_DecryptFinal_ex(&ctx, (unsigned char*)outBuffer, &outLen);decryOutLen += outLen;zlibOfs.write(outBuffer, decryOutLen);index++;needCryLen = needCryLen - BUFFERSIZE;}zlibOfs.close();EVP_CIPHER_CTX_cleanup(&ctx);


總結(jié)

以上是生活随笔為你收集整理的openssl c++实现bouncycastle中AES加解密的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。

主站蜘蛛池模板: 五月天激情小说 | 在线岛国 | 国产资源久久 | www.奇米.com | 亚洲综合视频在线观看 | 午夜激情综合 | 色.com| 亚洲综合插 | 久久丫精品国产亚洲av不卡 | 波多野结衣成人在线 | 午夜剧场福利社 | 99免费看| 99热最新网址 | 亚州av一区| 日本高潮视频 | 在线视频资源 | 狠狠操五月天 | 国产成人自拍视频在线 | 我的公把我弄高潮了视频 | 狠狠插影院 | 国产白拍| 国产 日韩 欧美 制服丝袜 | 四季av国产一区二区三区 | 中文字幕91爱爱 | 亚洲字幕av| 日本大尺度电影免费观看全集中文版 | 日本中文字幕在线播放 | 国产在线一区二区三区四区 | 国产在线不卡 | 亚洲精品中文无码AV在线播放 | 黄网站在线观 | 女主播在线观看 | 亚洲成人精 | 日韩美女一级片 | 伊人网免费视频 | 日韩在线精品 | youjizzxxx69| 欧洲女同同性吃奶 | 国产无遮挡aaa片爽爽 | 欧美性色网站 | 国产麻豆天美果冻无码视频 | 免费国产小视频 | 成人av高清| 区一区二视频 | 欧美jizz18性欧美 | 自拍偷拍亚洲欧美 | 久久蜜桃视频 | 国产喷潮 | www狠狠爱 | 国产字幕在线观看 | 欧美乱操| 亚洲国产影视 | 偷拍精品一区二区三区 | 夜夜操狠狠干 | 精品国产乱码久久久久夜深人妻 | 日韩av网址大全 | 91福利视频导航 | 噜噜噜久久,亚洲精品国产品 | 日韩精品福利在线 | 人妻大战黑人白浆狂泄 | 中文字幕高清 | 精品久久久噜噜噜久久久 | 国产精品女同一区二区 | 91尤物国产福利在线观看 | 日韩av一卡 | 久久久久九九 | 免费看色| 久久久精品久久 | 自拍偷拍亚洲天堂 | 91久久国产综合久久91精品网站 | 国产精品嫩草久久久久 | 亚洲中文字幕无码一区二区三区 | 97狠狠干 | 欧美成人午夜影院 | 日韩av影片在线观看 | 91官网在线观看 | 国产精品xxx在线观看 | 成人短视频在线免费观看 | 日韩欧| 国产精品一级黄色片 | 久久国产一区二区三区 | 欧美一区二区在线免费观看 | 香蕉视频A | 欧美黄色短视频 | 黄色性视频 | 色婷婷777777仙踪林 | aaa一级黄色片 | 自慰无码一区二区三区 | 在线免费观看av网 | 国产精品午夜在线观看 | 九九在线 | 国产中文字幕91 | 天堂在线视频免费观看 | 久久精品视频免费观看 | 超碰伊人久久 | 国产精品久久欧美久久一区 | 综合精品国产 | 色男天堂 | 亚洲精品黄色 |