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

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

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

瀏覽:27日期: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久久,三上悠亚国产精品一区二区三区
日韩av一区二区三区四区| 欧美特黄一区| 午夜影院欧美| 色婷婷精品视频| 在线看片国产福利你懂的| 成人在线视频免费| 国产一区二区视频在线看| 久久亚洲道色| 成人影视亚洲图片在线| 美女福利一区二区三区| 日韩精品一卡| 亚洲欧美激情诱惑| 亚洲欧美在线专区| 久久午夜视频| 亚洲人成高清| 国产欧美成人| 欧美xxxx中国| 欧美日韩在线二区| 亚洲精品小说| 亚洲区国产区| 国产精品2区| av资源中文在线| 1024精品一区二区三区| 国产视频亚洲| 69堂精品视频在线播放| 国产一区2区| 婷婷亚洲综合| 日本综合精品一区| 国产精品一区高清| 成人国产精品久久| 亚洲精品护士| 国产精品久久久久久妇女 | 国产精品综合| 精品国产鲁一鲁****| 国产激情一区| 午夜宅男久久久| 国产亚洲午夜| 亚洲精品88| 午夜在线视频观看日韩17c| 欧美一区成人| 美女福利一区二区三区| 日韩专区在线视频| 日韩激情av在线| 日本黄色精品| 亚洲欧美日韩国产一区| 麻豆久久一区二区| 在线视频精品| 精品美女久久| 在线亚洲观看| 麻豆国产91在线播放| 夜久久久久久| 日本黄色精品| 日韩三区四区| 韩国三级一区| 五月激激激综合网色播| 日韩av在线播放网址| 日韩一区精品视频| 麻豆一区二区在线| 国产手机视频一区二区| 欧美国产日本| 天使萌一区二区三区免费观看| 欧美韩一区二区| 日韩专区一卡二卡| 久久精品青草| 欧美成人精品午夜一区二区| 西西人体一区二区| 国产精品网站在线看| 成人美女视频| 久久久久亚洲| 亚州av乱码久久精品蜜桃| 欧美日韩国产高清电影| 在线免费观看亚洲| 免费观看日韩电影| 欧美精品国产一区| 亚洲精品黄色| 国产一区清纯| 久久精品影视| 久久成人av| 中文无码日韩欧| se01亚洲视频| 日韩不卡免费高清视频| 国产日产精品_国产精品毛片 | 日本天堂一区| 亚洲色图综合| 国产精品一区二区精品视频观看| 欧美一级网址| 亚洲电影在线| 精品资源在线| 在线 亚洲欧美在线综合一区| 丁香六月综合| 精品入口麻豆88视频| 日本不卡高清| 丝袜美腿亚洲色图| 日韩国产一区二区| 国产精品magnet| 欧美日本二区| 日韩国产精品久久久久久亚洲| 国产视频一区在线观看一区免费| 亚洲一级少妇| 免费在线播放第一区高清av| 最近国产精品视频| 丝袜亚洲另类欧美| 99在线精品免费视频九九视| 亚洲午夜黄色| 91精品一区二区三区综合在线爱| 日韩av二区在线播放| 亚洲免费一区三区| 日韩在线一二三区| 精品一区欧美| 婷婷国产精品| 欧美中文字幕一区二区| 欧美男人天堂| 成人亚洲欧美| 日本美女一区| 播放一区二区| 久久人人精品| 亚洲a在线视频| 久久亚洲在线| 欧美日韩日本国产亚洲在线| 黑丝一区二区| 日韩中文字幕麻豆| 日本成人在线视频网站| 日韩精品视频中文字幕| 久久精品不卡| 日韩精品一区二区三区中文字幕| 国产精品日本| 欧美日韩国产高清电影| 99视频一区| 伊人久久亚洲| 久久精品国产久精国产爱| 里番精品3d一二三区| 国产精品视频3p| 日韩精品免费视频人成| 在线观看免费一区二区| 精品久久免费| 亚洲欧美综合| 亚洲永久精品唐人导航网址| 国产视频网站一区二区三区| 水野朝阳av一区二区三区| 蜜桃久久av| 国产精品日韩精品在线播放| 久久久久国产精品一区三寸| 黄色成人在线网址| 视频精品一区二区| 美女高潮久久久| 久久精品高清| 成人污污视频| 日韩av一二三| 久久九九99| 国产91欧美| 国产农村妇女精品一区二区| 日韩精品成人在线观看| 国产丝袜一区| 美女日韩在线中文字幕| 欧美亚洲二区| 精品久久网站| 99精品视频在线| 99日韩精品| 日本aⅴ精品一区二区三区 | 日本不卡中文字幕| 精品一区二区三区视频在线播放| 日韩欧美看国产| 香蕉久久久久久| 国产成人久久精品麻豆二区| 视频精品一区| 中文字幕人成乱码在线观看 | 精品国产成人| 亚洲精品四区| 欧美天堂亚洲电影院在线观看| 免费视频一区二区三区在线观看| sm捆绑调教国产免费网站在线观看| 久久国产直播| 日韩欧美在线精品| 日本一区二区高清不卡| 99pao成人国产永久免费视频| 亚洲天堂成人| 91亚洲无吗| 成午夜精品一区二区三区软件| 欧美日韩国产综合网| 国产精品66| 99在线精品视频在线观看| 国产精品久久亚洲不卡| 男人的天堂久久精品| 久久一区精品| 久久久一二三| 亚洲免费资源| 国产成人调教视频在线观看| 97精品一区二区| 国内在线观看一区二区三区 | 少妇精品久久久| 日韩精品一区第一页| 在线看片不卡| 亚洲电影在线一区二区三区| 久久久久免费av| 国产一区二区三区探花| 日韩在线一区二区| 日韩中文欧美| 青青草精品视频| 婷婷成人在线| 精品一区二区三区四区五区|