日韩av黄I国产麻豆传媒I国产91av视频在线观看I日韩一区二区三区在线看I美女国产在线I麻豆视频国产在线观看I成人黄色短片

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 >

JSON 接口如何实现 RSA 非对称加密与签名

發(fā)布時(shí)間:2025/7/14 51 豆豆
生活随笔 收集整理的這篇文章主要介紹了 JSON 接口如何实现 RSA 非对称加密与签名 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

代碼地址如下:
http://www.demodashi.com/demo/14000.html

一、概述

1、 數(shù)字簽名的作用:保證數(shù)據(jù)完整性,機(jī)密性和發(fā)送方角色的不可抵賴性,加密與簽字結(jié)合時(shí),兩套公私鑰是不同的。

2、加密是對(duì)信息進(jìn)行編碼和解碼的技術(shù),編碼是把原來可讀信息(又稱明文)譯成代碼形式(又稱密文),其逆過程就是解碼(解密),加密技術(shù)的要點(diǎn)是加密算法,加密算法可以分為三類: .對(duì)稱加密 ,非對(duì)稱加密 ,不可逆加密。

3、對(duì)稱加密算法

a、加密過程: 將明文分成N個(gè)組,然后對(duì)各個(gè)組進(jìn)行加密,形成各自的密文,最后把所有的分組密文進(jìn)行合并,形成最終的密文。

b、優(yōu)點(diǎn): 算法公開、計(jì)算量小、加密速度快、加密效率高

c、缺點(diǎn): 交易雙方都使用同樣鑰匙,安全性得不到保證,密鑰管理困難,尤其是在分布式網(wǎng)絡(luò)中

d、常用算法: DES、3DES(TripleDES)、AES、RC2、RC4、RC5和Blowfish

4、非對(duì)稱加密算法

a、使用過程: 乙方生成兩把密鑰(公鑰和私鑰),甲方獲取乙方的公鑰,然后用它對(duì)信息加密。乙方得到加密后的信息,用私鑰解密,乙方也可用私鑰加密字符串,甲方獲取乙方私鑰加密數(shù)據(jù),用公鑰解密。

b、優(yōu)點(diǎn): 更安全,密鑰越長(zhǎng),它就越難破解

c、缺點(diǎn): 加密速度慢

d、常用算法: RSA、Elgamal、背包算法、Rabin、D-H、ECC(橢圓曲線加密算法)

二、簽名詳細(xì)

簽名方法:

public static String sign(String content, String privateKey, String input_charset){try {PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec( Base64.decode(privateKey) ); KeyFactory keyf = KeyFactory.getInstance("RSA");PrivateKey priKey = keyf.generatePrivate(priPKCS8);java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);signature.initSign(priKey);signature.update( content.getBytes(input_charset) );byte[] signed = signature.sign();return Base64.encode(signed);}catch (Exception e) {e.printStackTrace();}return null;}

驗(yàn)證簽名方法

public static boolean verify(String content, String sign, String ali_public_key, String input_charset){try {KeyFactory keyFactory = KeyFactory.getInstance("RSA");byte[] encodedKey = Base64.decode(ali_public_key);PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));java.security.Signature signature = java.security.Signature.getInstance(SIGN_ALGORITHMS);signature.initVerify(pubKey);signature.update( content.getBytes(input_charset) );boolean bverify = signature.verify( Base64.decode(sign) );return bverify;} catch (Exception e) {e.printStackTrace();}return false;}

三、加密詳細(xì)

公鑰加密

public static byte[] encryptByPublicKey(byte[] data, String key)throws Exception{// 對(duì)公鑰解密byte[] keyBytes = decryptBASE64(key);// 取公鑰X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM);Key publicKey = keyFactory.generatePublic(x509EncodedKeySpec);// 對(duì)數(shù)據(jù)解密Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.ENCRYPT_MODE, publicKey);int length = data.length;byte[] enBytes = null;for (int i = 0; i < length; i += 64){byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(data, i, i + 64));enBytes = ArrayUtils.addAll(enBytes, doFinal);}return enBytes;}

私鑰解密

public static byte[] decryptByPrivateKey(byte[] data, String key)throws Exception{// 對(duì)私鑰解密byte[] keyBytes = decryptBASE64(key);PKCS8EncodedKeySpec pkcs8EncodedKeySpec = new PKCS8EncodedKeySpec(keyBytes);KeyFactory keyFactory = KeyFactory.getInstance(KEY_ALGORTHM);Key privateKey = keyFactory.generatePrivate(pkcs8EncodedKeySpec);// 對(duì)數(shù)據(jù)解密Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());cipher.init(Cipher.DECRYPT_MODE, privateKey);byte[] deBytes = null;int length = data.length;for (int i = 0; i < length; i += 128){byte[] doFinal = cipher.doFinal(ArrayUtils.subarray(data, i,i + 128));deBytes = ArrayUtils.addAll(deBytes, doFinal);}return deBytes;}

運(yùn)行結(jié)果圖:

項(xiàng)目結(jié)構(gòu)圖:

其他

如果使用了https,是否還需要對(duì)接口進(jìn)行rsa加密或者簽名?
https 防止中間人攻擊, rsa驗(yàn)證身份。 缺一不可。比如支付寶的訂單接口 https,誰都可以調(diào)用, 但是用你的rsa私鑰簽名是告訴支付寶:“這是我調(diào)用的”,當(dāng)支付寶調(diào)用你的接口,通知你支付寶狀態(tài)的時(shí)候, 也會(huì)用它的私鑰簽名 告訴你“這的確是來著支付寶的請(qǐng)求”,這樣才能說明這個(gè)訂單 是真真實(shí)實(shí)成功的。

JSON 接口如何實(shí)現(xiàn) RSA 非對(duì)稱加密與簽名

代碼地址如下:
http://www.demodashi.com/demo/14000.html

注:本文著作權(quán)歸作者,由demo大師代發(fā),拒絕轉(zhuǎn)載,轉(zhuǎn)載需要作者授權(quán)

總結(jié)

以上是生活随笔為你收集整理的JSON 接口如何实现 RSA 非对称加密与签名的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

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