日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

Java讀取OpenSSL生成的PEM公鑰文件操作

瀏覽:29日期:2022-08-23 11:41:49

JDK8的JCE是不支持讀取PEM文件的。需要使用bouncycastle。

項目需求,使用SHA1WithRSA算法,對接口數據做簽名。

代碼如下:

@Serviceclass SignService { private static Logger LOG = LoggerFactory.getLogger(SignService.class); @Autowired private Config config; private Signature signature; @PostConstruct private void init() { try { PKCS8EncodedKeySpec priKeySpec = new PKCS8EncodedKeySpec( getDecoder().decode(config.getPrivateKey().getBytes(ISO_8859_1))); KeyFactory factory = KeyFactory.getInstance('RSA'); PrivateKey privateKey = factory.generatePrivate(priKeySpec); signature = Signature.getInstance('SHA1WithRSA'); signature.initSign(privateKey); } catch (NoSuchAlgorithmException | /*InvalidAlgorithmParameterException |*/ InvalidKeySpecException | InvalidKeyException ex) { LOG.warn('RSA init error: {}.', ex); } } String signAndEncode(String source) { if (Objects.isNull(source)) { return null; } else { return sign(source) .map(this::encode) .orElse(''); } } private String encode(byte[] source) { return getEncoder() .encodeToString(source); } private synchronized Optional<byte[]> sign(String source) { try { signature.update(source.getBytes(ISO_8859_1)); return Optional.of(signature.sign()); } catch (SignatureException e) { LOG.warn('SHA1WithRSA {} error: {}.', source, e); return Optional.empty(); } }}

單元測試,驗證簽名是否正確。先初始化Signature:

private Signature signature; @Before public void init() { try { byte[] key = Files.readAllBytes(Paths.get('/home/ls', 'ras_public_key.pem')); Security.addProvider(new BouncyCastleProvider()); final PemObject pemObject; try (PemReader pemReader = new PemReader(new InputStreamReader( new ByteArrayInputStream(key)))) { pemObject = pemReader.readPemObject(); } X509EncodedKeySpec pubKeySpec = new X509EncodedKeySpec(pemObject.getContent()); KeyFactory factory = KeyFactory.getInstance('RSA'); PublicKey publicKey = factory.generatePublic(pubKeySpec); signature = Signature.getInstance('SHA1WithRSA'); signature.initVerify(publicKey); } catch (Exception e) { e.printStackTrace(); } }

驗證方法

private boolean verify(String source, String sign) { byte[] data = getDecoder().decode(sign); try { signature.update(source.getBytes()); return signature.verify(data); } catch (SignatureException e) { e.printStackTrace(); return false; } }

測試

String source = service.signature(request); String sign = signService.signAndEncode(source); System.out.println(sign); assertTrue(verify(source, sign));

證明,內容沒有被篡改。

其中,ras_public_key.pem文件由openSSL生成。

ls@LS-8500:~$ openssl genrsa -out rsa_private_key.pem 1024Generating RSA private key, 1024 bit long modulus (2 primes)...+++++...............+++++e is 65537 (0x010001)ls@LS-8500:~$ openssl pkcs8 -topk8 -inform PEM -in rsa_private_key.pem -outform PEM -nocrypt-----BEGIN PRIVATE KEY-----MIICeQIBADANBgkqhkiG9w0BAQEFAASCAmMwggJfAgEAAoGBAOk4nqif4LtwfePZIeGgUc5XYbWk8FpT6UEgO/43i0uprf2RXs3j9eDjOyRwkW2iMCF6S3bNxYuiyJv4eNc+8w87PJ9bOMRq9WH+ISWIfnPu2x6A1oNOeNkAL7v3ztmpcAn2bNMJ5VscSKp8S1U02LbHpOErPjvnEul9a/e8xb7TAgMBAAECgYEAvpMeyuoCKQiORo6aqhVoY7VxyY2jPhyNYUNm4qAeulBINgkBMDtUI1VrcaZun+jFbcXSPp19DFKTnSgYDsOItt04VLRSZm5yU1EfL21ZvbxIQjjSMv4BxndjdfdoGh5Gve0p1vqtnXtMivkNNI/HdCrxR2CpcGNo4Uqg+zgvwzECQQD1yULuH1sMTEGqLHZaBXVVt1ny+oF+3CnDz2ZdQTWjSLFfBSKplCL8TuEakauUiYf6BVtOjrpzKHRs7hDuZLW5AkEA8umwPbO09ijQdg5e/nkEnJnG5C4krXZuIcsYnf1wrBCLAoOImgDSvVzRrXHMGNvvP0D3gTIxwZSNPt571OFe6wJBAJmcOm9WO3IZKqTvetxSMv3qRJY+B7bAZH3TXleEDMDLCsenDv3K7n6f0cHoLsL7nXcd5+3V+CNGslTuCLjlSkkCQQCM1fqNu5xmwAElAW4IIkgPN4U+FJbFT43I4ATUzPU/fZPrEDHqACIvEhqrcfgATbuns9YMPPrmHmfKFJo9MbGjAkEAzmbWIsDQP4S8TJVd6PvyNZgNrTZvtlMT8/v4MytaEErrljhAR/YLKLcWFxLmQNAL9g4MSsHT8KunE5YrBmkXkg==-----END PRIVATE KEY-----ls@LS-8500:~$ openssl rsa -in rsa_private_key.pem -pubout -out ras_public_key.pemwriting RSA key

補充知識:Java導入OpenSSL生成的公私鑰文件

1. 生成2048-bit RSA私鑰

$ openssl genrsa -out private_key.pem 2048

2. 導出RSA公鑰

$ openssl rsa -in private_key.pem -pubout -out public_key.pem

3. 將公私鑰文件private_key.pem和public_key.pem的頭尾注釋去掉

即:

-----BEGIN PUBLIC KEY-----

-----END PUBLIC KEY-----

-----BEGIN RSA PRIVATE KEY-----

-----END RSA PRIVATE KEY-----

4. 讀取公私鑰文件內容

// filePath即為private_key.pem和public_key.pempublic static String getKeyFromFile(String filePath) throws Exception { File file = new File(filePath); InputStream ins = new FileInputStream(file); BufferedReader br = new BufferedReader(new InputStreamReader(ins)); String readLine = null; StringBuffer sb = new StringBuffer(); while ((readLine = br.readLine()) != null) { sb.append(readLine); } br.close(); ins.close(); return new String(sb);}

5. 讀取私鑰

public static PrivateKey getPrivateKey(String privateKey) throws Exception { // 解碼由base64編碼的私鑰 byte[] keyBytes = decryptBASE64(privateKey); PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); // 取得私鑰 PrivateKey priKey = keyFactory.generatePrivate(pkcs8KeySpec); return priKey;}

6. 讀取公鑰

public static PublicKey getPublicKey(String publicKeyStr) throws Exception { // 解碼由base64編碼的公鑰 byte[] keyBytes = decryptBASE64(publicKeyStr); // 取得公鑰 X509EncodedKeySpec x509KeySpec = new X509EncodedKeySpec(keyBytes); KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORITHM); PublicKey publicKey = keyFactory.generatePublic(x509KeySpec); return publicKey;}

以上這篇Java讀取OpenSSL生成的PEM公鑰文件操作就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持好吧啦網。

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
欧美久久亚洲| 精品美女视频| 激情欧美日韩一区| 最新日韩欧美| 亚洲精品国产精品粉嫩| 日韩高清一级| 日韩**一区毛片| 欧美激情日韩| 日韩美女一区二区三区在线观看| 亚洲播播91| 欧美日韩国产在线一区| 亚洲人成高清| 免费在线播放第一区高清av| 日本一区二区免费高清| 国产二区精品| 亚洲精品在线国产| 精品国产乱码久久久久久1区2匹 | 亚洲免费一区二区| 日韩亚洲精品在线观看| 国产一精品一av一免费爽爽| 精品中文字幕一区二区三区 | 亚洲一区黄色| 欧美日韩一区二区三区四区在线观看| 国产精品一区二区三区av麻| 久久天堂影院| 夜夜嗨av一区二区三区网站四季av| 天堂va在线高清一区| zzzwww在线看片免费| 亚洲欧美日韩专区| 你懂的国产精品永久在线| 国产亚洲一区二区手机在线观看| 久久久久99| 久久精品国产大片免费观看| 亚洲精品韩国| 成人va天堂| 日韩精品乱码av一区二区| 黄色aa久久| 中文字幕一区二区精品区| 精品一二三区| 日韩在线a电影| 国产精品成久久久久| 日韩中文欧美在线| 亚洲精品永久免费视频| 日韩avvvv在线播放| 欧美 日韩 国产精品免费观看| 日韩精品导航| 精品亚洲美女网站| 91欧美日韩在线| 99riav1国产精品视频| 国产精品成人**免费视频| 午夜日韩在线| 麻豆精品久久久| 亚洲免费福利一区| 国产一区欧美| 成人一二三区| 国产精品久久久久久久久久齐齐| 日韩亚洲国产欧美| 久久久成人网| 黄色网一区二区| 欧美日韩一区二区三区四区在线观看| 夜夜嗨一区二区| 日韩欧美午夜| 免费观看亚洲天堂| 日本va欧美va欧美va精品| 亚洲一区不卡| 999国产精品999久久久久久| 精品久久99| 国产伦精品一区二区三区视频 | 欧美特黄一区| 欧美天堂视频| 久久午夜影院| 国产精久久一区二区| 久久福利影视| 欧美精品一区二区久久| 日韩精品欧美| 日韩在线短视频| 福利视频一区| 久久中文字幕一区二区三区| 国产欧美一区二区三区精品观看| 视频在线观看一区| 国产视频一区三区| 1000部精品久久久久久久久| 天堂8中文在线最新版在线| 精品99在线| 麻豆久久一区| 美腿丝袜在线亚洲一区| 欧美一区不卡| 蜜桃久久av| 性欧美精品高清| 黄色精品网站| 视频一区在线视频| 免费看日韩精品| 免费日韩av| 西西人体一区二区| 日韩专区一卡二卡| 亚洲一区二区av| 亚洲欧洲国产精品一区| 免费国产自线拍一欧美视频| 亚洲欧美日韩国产一区| 亚洲一二三区视频| 日韩国产欧美在线播放| 国产欧美另类| 国产精品毛片aⅴ一区二区三区| 国产精品第一国产精品| 免费亚洲一区| 伊人久久国产| 欧美不卡视频| 中文字幕av亚洲精品一部二部 | 视频一区二区三区入口| 日韩精品亚洲专区| 国产欧美另类| 黑森林国产精品av| 图片区亚洲欧美小说区| 视频一区免费在线观看| 日韩精品第二页| 国产福利亚洲| 精品一区av| 久久精品国内一区二区三区水蜜桃| 日本精品在线中文字幕| 好看的av在线不卡观看| 久久国产精品亚洲77777| 日韩精品乱码av一区二区| 欧美激情五月| 亚洲调教视频在线观看| 视频一区二区三区入口| 欧美日韩亚洲一区三区| 成人国产精品一区二区网站| 激情六月综合| 日韩国产在线观看一区| 国产一区2区| 欧美日韩国产一区二区三区不卡| 久久一区二区三区电影| 亚洲精品视频一二三区| 国产一区二区三区视频在线| 极品日韩av| 国产日韩一区| 欧美久久天堂| 蜜桃传媒麻豆第一区在线观看| 国产精品一区二区av交换| 精品捆绑调教一区二区三区| 免费在线成人网| 久久精品毛片| 好吊视频一区二区三区四区| 久久国产精品免费精品3p| 亚洲精品国产嫩草在线观看 | 日本va欧美va精品| 欧美成a人国产精品高清乱码在线观看片在线观看久 | 性欧美xxxx免费岛国不卡电影| 麻豆亚洲精品| 国产不卡精品| 视频一区二区三区在线| 国模精品一区| 亚洲人妖在线| 99视频精品全国免费| 奇米狠狠一区二区三区| 久久久久一区| 国产精品黄网站| 久久福利精品| 欧美精选视频一区二区| 日韩一区二区三区在线看| 久久精品亚洲欧美日韩精品中文字幕| 日韩二区三区四区| 久久影视一区| 久久这里只有精品一区二区| 丝袜脚交一区二区| 久久国产中文字幕| 久久gogo国模啪啪裸体| 视频一区中文字幕| 99久久久国产精品美女| 国产经典一区| 中文字幕日韩亚洲| 伊人久久大香线蕉av不卡| 久久gogo国模啪啪裸体| 日韩一区二区三区四区五区| 午夜久久tv| 亚洲综合在线电影| 欧美国产免费| 欧美日韩视频免费看| 蜜臀久久99精品久久久画质超高清 | 欧美+亚洲+精品+三区| 国产精品s色| 婷婷综合福利| 好吊日精品视频| 久久久夜夜夜| 久久久久久一区二区| 国产精品激情| 日韩av一区二区三区四区| 国产精品日本| 国产在线日韩| 免费视频国产一区| 欧美一区二区三区高清视频 | 日韩激情av在线| 蜜臀av在线播放一区二区三区| 国产高潮在线| 日韩成人精品一区| 精品国产aⅴ| 久久不见久久见国语| 欧美一区自拍| 日本一区福利在线| 日韩极品在线观看|