zoukankan      html  css  js  c++  java
  • 开放API接口及其安全性

    开放出来给别人调用的API接口是就是开放API接口。

    弱点:

    数据窃取

    用户的密码等信息被不轨之人窃取,登录账号发布敏感信息,盗刷等。

    数据篡改

    提交的数据被抓包后进行篡改再提交。

    数据泄露

    爬虫将业务数据甚至核心数据抓取,直接或者间接造成损失。

    RSA/DES加密

    MD5混淆

    TOKEN令牌

    有令牌才能通过,没有令牌则不能通过

    加密分为对称加密和非对称加密

    对称加密有:DES,AES

    加密和解密是使用同一套秘钥

    非对称加密有:RSA 

    公钥和私钥

    公钥加密,私钥解密

    RSA可以用来加密和签名

     

    HTTPS,收费,性能会稍微低一些。

    HTTPS既使用了对称加密,也是用了非对称加密

    /**
     * 引用的包都是Java自带的jar包
     * base64编码解码
     */
    import java.security.Key;
    import java.security.KeyPair;
    import java.security.KeyPairGenerator;
    import java.security.interfaces.RSAPrivateKey;
    import java.security.interfaces.RSAPublicKey;
    import java.util.HashMap;
    import java.util.Map;
    
    import sun.misc.BASE64Decoder;
    import sun.misc.BASE64Encoder;
    
    public class CreateSecrteKey {
        
        public class Keys{
            
        }
        
        public static final String KEY_ALGORITHM = "RSA";
        
        private static final String PUBLIC_KEY = "RSAPublicKey";
        private static final String PRIVATE_KEY = "RSAPrivateKey";
        
        //获得公钥
        public static String getPublicKey(Map<String,Object>keyMap) {
            Key key = (Key) keyMap.get(PUBLIC_KEY);
            System.out.println(key.toString());
            return encryptBASE64(key.getEncoded());
            
        }
        
        //获得私钥
        public static String getPrivateKey(Map<String,Object>keyMap) {
            Key key = (Key) keyMap.get(PRIVATE_KEY);
            return encryptBASE64(key.getEncoded());
        }
        
        //解码返回字符串
        public static byte[] decryptBASE64(String key) throws Exception {
            return (new BASE64Decoder()).decodeBuffer(key);
        }
        
        public static String encryptBASE64(byte[]key) {
            return (new BASE64Encoder()).encodeBuffer(key);
        }
        
        public static Map<String, Object> initKey() throws Exception{
            KeyPairGenerator keyPairGen = KeyPairGenerator.getInstance(KEY_ALGORITHM);
            keyPairGen.initialize(1024);
            KeyPair keyPair = keyPairGen.generateKeyPair();
            RSAPublicKey publicKey = (RSAPublicKey) keyPair.getPublic();
            RSAPrivateKey privateKey = (RSAPrivateKey) keyPair.getPrivate();
            
            Map<String, Object> keyMap = new HashMap<String,Object>(2);
            keyMap.put(PUBLIC_KEY, publicKey);
            keyMap.put(PRIVATE_KEY, privateKey);
            return keyMap;
        }
        
    
        public static void main(String[] args) {
            // TODO Auto-generated method stub
            Map<String, Object> keyMap;
            try {
                keyMap = initKey();
                String publicKey = getPublicKey(keyMap);
                System.out.println(publicKey);
                String privateKey = getPrivateKey(keyMap);
                System.out.println(privateKey);
            }catch(Exception e) {
                e.printStackTrace();
            }
    
        }
    
    }
  • 相关阅读:
    脚本输出EBMIDE——断点跟踪输出
    框架配置Winter framework 高效灵活的请求处理框架
    项目经理微软第一份实习
    事件编辑器ScriptCase中的PHP代码编辑器
    命令服务删除virtual bridge
    ajax前台asp.net利用Ajax和Jquery在前台向后台传参数并返回值
    概率数据HDU1203 I NEED A OFFER!(0、1背包)
    控件当前日期android控件之DatePicker和TimePicker
    输入命令xalan初步学习
    函数接口Inside COM读书笔记调度接口与自动化
  • 原文地址:https://www.cnblogs.com/LoganChen/p/12287381.html
Copyright © 2011-2022 走看看