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();
            }
    
        }
    
    }
  • 相关阅读:
    C# API 大全
    也说_T、_TEXT、TEXT、L
    项脊轩志--归有光
    C# tostring()汇总
    StructLayout特性
    关于C#静态构造函数的几点说明
    C#生成DLL文件
    做.net的早晚会用到,并且网上还没有这方面的正确资料或几乎很少
    C# 实现屏幕键盘 (ScreenKeyboard)
    Microsoft .NET Native
  • 原文地址:https://www.cnblogs.com/LoganChen/p/12287381.html
Copyright © 2011-2022 走看看