成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

研發(fā)必備:輕松玩轉(zhuǎn)開放接口API簽名和驗簽

安全 應(yīng)用安全
在效率上來說,對稱加密的效率顯然更高,但是非對稱加密的安全性更高。所以一般在實際的HTTPS加密過程中,首次連接使用的是公鑰加密算法(非對稱加密)來傳輸數(shù)據(jù)加密所要使用的對稱加密的密鑰,之后傳輸中使用的都是對稱加密算法。

一、簡介

開放接口API的簽名和驗簽是一種常見的安全機制,用于確保接口請求的完整性和真實性。

1.1、對稱加密和非對稱加密

 對稱加密:加密和解密使用的是同一把密鑰。常用的對稱加密算法:DES,AES,3DES。

非對稱加密:加密和解密使用的是不同的密鑰,一把作為公開分享給加密方的叫做公鑰,另一把不分享作為解密的私鑰。公鑰加密的密文只有私鑰能進行解密;私鑰加密的密文也只有公鑰能進行解密。常見的非對稱加密算法:RSA,ECC。

總之:在效率上來說,對稱加密的效率顯然更高,但是非對稱加密的安全性更高。所以一般在實際的HTTPS加密過程中,首次連接使用的是公鑰加密算法(非對稱加密)來傳輸數(shù)據(jù)加密所要使用的對稱加密的密鑰,之后傳輸中使用的都是對稱加密算法。

1.2、生成非對稱秘鑰對

第三方系統(tǒng)作為調(diào)用方(客戶端),與接口服務(wù)方(服務(wù)端)約定好加密算法和客戶端名稱(clientID),便于在服務(wù)方系統(tǒng)中來唯一標(biāo)識調(diào)用方系統(tǒng)。約定好以后,服務(wù)方為每一個調(diào)用方系統(tǒng)專門生成一個專屬的非對稱密鑰對(RSA密鑰對)。私鑰頒發(fā)給調(diào)用方系統(tǒng)(客戶端),公鑰由服務(wù)方持有。

圖片圖片

注意:調(diào)用方(客戶端)系統(tǒng)需要保管好私鑰(存到調(diào)用方系統(tǒng)的后端)。因為對于服務(wù)方系統(tǒng)而言,調(diào)用方系統(tǒng)是消息的發(fā)送方,其持有的私鑰唯一標(biāo)識了它的身份是服務(wù)方系統(tǒng)受信任的調(diào)用方。調(diào)用方系統(tǒng)的私鑰一旦泄露,調(diào)用方對原系統(tǒng)毫無信任可言。

1.3 開放接口API

不需要登錄憑證就允許被第三方系統(tǒng)調(diào)用的接口,必須要考慮接口數(shù)據(jù)的安全性問題。比如:數(shù)據(jù)是否被篡改?數(shù)據(jù)是否已過時?數(shù)據(jù)是否可以重復(fù)提交?等問題。為了防止開放接口被惡意調(diào)用,開放接口一般都需要驗簽才能被調(diào)用。

 1.4、 簽名和驗簽

簽名:是第三方系統(tǒng)在調(diào)用接口API前,需按照接口API提供方的規(guī)則根據(jù)所有請求參數(shù)生成一個簽名(字符串),在調(diào)用接口時攜帶該簽名的。

特別注意:為了確保生成簽名的處理細節(jié)與服務(wù)方系統(tǒng)的驗簽邏輯是匹配的,服務(wù)方系統(tǒng)一般都提供jar包或者代碼片段給調(diào)用方來生成簽名,否則可能會因為一些處理細節(jié)不一致導(dǎo)致生成的簽名是無效的

 驗簽:接口提供方會驗證簽名的有效性,只有簽名驗證有效才能正常調(diào)用接口,否則請求會被駁回。

圖片圖片

二、應(yīng)用案例

圖片圖片

核心代碼:

/**
 * @Description: TODO:使用RSA完成簽名驗簽
 * @Author: yyalin
 * @CreateDate: 2023/3/28 14:37
 * @Version: V1.0
 */
@Slf4j
public class RSAUtils {
    public static final String SIGNATURE_INSTANCE = "SHA256withRSA";  //簽名
    public static final String KEYPAIR_INSTANCE = "RSA";  //秘鑰類型
    /**
     * 功能描述:RSA公私鑰生成器
     * @MethodName: genKey
     * @MethodParam: []
     * @Return: Map
     * @Author: yyalin
     * @CreateDate: 2023/12/18 15:34
     */
    public static Map genKey() throws Exception{
        KeyPairGenerator kpg = KeyPairGenerator.getInstance(KEYPAIR_INSTANCE);
        kpg.initialize(1024);
        KeyPair kep = kpg.generateKeyPair();
        PrivateKey pkey = kep.getPrivate();
        PublicKey pubkey = kep.getPublic();
        Map<String,Object> param=new HashMap<String,Object>();
        param.put("publicKey", new String(Base64Utils.encode(pubkey.getEncoded())));
        param.put("privateKey", new String(Base64Utils.encode(pkey.getEncoded())));
        return param;
    }
    /**
     * 功能描述:RSA簽名
     * @MethodName: sign
     * @MethodParam: [content:需要簽名的字符串, privateKey:RSA私鑰]
     * @Return: java.lang.String
     * @Author: yyalin
     * @CreateDate: 2023/12/18 16:10
     */
    public static String sign(String content, String privateKey) throws Exception {
        byte[] str= Base64Utils.decode(privateKey.getBytes("UTF-8"));
        PKCS8EncodedKeySpec priPKCS8 = new PKCS8EncodedKeySpec(str);
        KeyFactory keyf = KeyFactory.getInstance(KEYPAIR_INSTANCE);
        PrivateKey priKey = keyf.generatePrivate(priPKCS8);
        java.security.Signature signature = java.security.Signature.getInstance(SIGNATURE_INSTANCE);
        signature.initSign(priKey);
        signature.update(content.getBytes("UTF-8"));
        byte[] signed = signature.sign();
        return new String(Base64Utils.encode(signed),"UTF-8");
    }
    /**
     * 功能描述:RSA驗簽
     * @MethodName: verify
     * @MethodParam: [content:原文內(nèi)容, sign:待驗證的簽名, public_key:RSA公鑰]
     * @Return: boolean 簽名結(jié)果
     * @Author: yyalin
     * @CreateDate: 2023/12/18 16:11
     */
    public static boolean verify(String content, String sign, String public_key)
            throws Exception {
        KeyFactory keyFactory = KeyFactory.getInstance(KEYPAIR_INSTANCE);
        byte[] encodedKey = Base64Utils.decode(public_key.getBytes("UTF-8"));
        PublicKey pubKey = keyFactory.generatePublic(new X509EncodedKeySpec(encodedKey));
        java.security.Signature signature = java.security.Signature.getInstance(SIGNATURE_INSTANCE);
        signature.initVerify(pubKey);
        signature.update(content.getBytes("UTF-8"));
        boolean bverify = signature.verify(Base64Utils.decode(sign.getBytes("UTF-8")));
        return bverify;
    }
}

測試內(nèi)容:

//測試使用
    public static void main(String[] args) throws Exception {
        //1、獲取公私鑰匙 請求方獲取公鑰私鑰后,傳私鑰發(fā)送請求
        Map<String,Object> param=RSAUtils.genKey();
        log.info("輸出的公鑰私鑰param:"+param);
        String publicKey= (String) param.get("publicKey");
        String privateKey= (String) param.get("privateKey");
        //2、簽名 獲取私鑰,獲取請求后對內(nèi)容進行加標(biāo)簽返回
        String cnotallow="您好!";
        String sign=RSAUtils.sign(content, privateKey);
        log.info("使用私鑰輸出的標(biāo)簽sign:"+sign);
        //3、驗簽
//        String cnotallow="您好!";
        boolean verify=RSAUtils.verify(content, sign,  publicKey);
        log.info("使用公鑰驗簽結(jié)果verify:"+verify);


    }

測試結(jié)果:

圖片圖片

請求體內(nèi)容被篡改了:

圖片圖片

責(zé)任編輯:武曉燕 來源: 程序猿小楊
相關(guān)推薦

2020-07-20 07:46:01

程序員加簽驗簽

2020-04-14 11:43:54

Python加密解密授權(quán)認證

2021-12-27 16:20:45

鴻蒙HarmonyOS應(yīng)用

2011-09-21 14:17:12

Google+

2023-03-10 18:34:31

2013-07-24 10:10:57

天翼開放平臺WEB短信API

2025-02-12 07:13:54

Knife4jAPISpringBoot

2011-06-15 09:47:56

微軟云計算Microsoft

2013-10-16 09:10:12

2020-09-24 10:57:12

編程函數(shù)式前端

2021-11-10 16:07:01

鴻蒙HarmonyOS應(yīng)用

2021-11-10 16:08:45

鴻蒙HarmonyOS應(yīng)用

2021-12-07 00:10:25

C# 微信支付

2023-08-18 14:39:02

2010-07-09 12:09:34

IT運維Mocha BSM摩卡軟件

2022-07-19 11:30:29

接口安全

2010-09-01 10:09:32

CSS樣式

2020-03-23 14:40:44

騰訊會議騰訊云開放API

2015-03-18 10:58:27

Google Now API

2018-03-15 14:07:17

潤乾Excel行列轉(zhuǎn)換
點贊
收藏

51CTO技術(shù)棧公眾號

主站蜘蛛池模板: 欧美视频成人 | 成人午夜黄色 | 午夜精品久久久久久久久久久久久 | 96国产精品久久久久aⅴ四区 | 欧美精品一区二区三区四区 | 特一级黄色毛片 | 欧美色综合 | 国产欧美一区二区三区久久手机版 | 久久精品一区二区 | 日韩欧美国产精品一区 | 欧美黄色免费网站 | 亚洲欧美日韩一区二区 | 欧美日韩激情 | 久久精品成人热国产成 | 久久久久久毛片免费观看 | 久久精品一 | 91亚洲精 | 国产丝袜一区二区三区免费视频 | 久久99精品久久久久久国产越南 | 亚洲自拍偷拍免费视频 | 在线视频一区二区三区 | 91麻豆蜜桃一区二区三区 | 国产精品观看 | 一区二区av | 午夜国产在线 | 日本久草| 99在线免费视频 | 欧美精品成人影院 | 久久人人网 | 亚洲精品一区二区三区四区高清 | 精品精品视频 | 色婷婷综合久久久中字幕精品久久 | 91大神在线资源观看无广告 | 精品久久久久久久 | 性视频网 | 久久黄色网 | 蜜桃精品视频在线 | 精品少妇一区二区三区在线播放 | 中文字幕在线剧情 | 久久99精品久久久久久国产越南 | 欧美狠狠操 |