A8站源码交易平台 Android开发之接口安全

摘要:1、设置一个key 2、依据上述的key对恳求进行解密(校验成功便是「信赖」的客户端发来的数据,不然回绝 呼应) 3、处理事务逻辑并发生成果 4、将成果反馈给客户端

token
    token=5位随机数+时刻戳
    aesEnctrypt(token)

1.验证时刻和服务器时刻不能超过3分。
2.同一个时刻戳,随机数只能运用一次。


对称加密

    把参数对称加密 aes

签名验证

  • ras

            调用方,要供给公钥,sign(经过两边界说好的算法把摘要和参数核算后的值)。
            咱们把post过来的参数先解密,经过拟定的算法算出sign。
            咱们看咱们算出sign与调用方传过来的sign是否共同,共同则能够进行事务处理,不共同回来 签名失利。


  • sign算法

        secretKey是两边界说的摘要
        params是参数的hashmap调集

byte[] data=Digest.getDigest(secretKey, params);
public class Digest {
     public static byte[] getDigest(String secretKey, Map params) throws Exception{
            SetkeySet = params.keySet();
            TreeSetsortSet = new TreeSet<>();
            sortSet.addAll(keySet);
            String keyValueStr = "";
            Iteratorit = sortSet.iterator();
            while(it.hasNext()){
                String key = it.next();
                String value = params.get(key);
                keyValueStr += key + value;
            }
            keyValueStr = keyValueStr + secretKey;
            MessageDigest md = MessageDigest.getInstance("SHA-1");
            return md.digest(keyValueStr.getBytes("utf-8"));
        }
}
boolean b=RsaUtil.verify(data, sign, publicKeyString);



b=false 回来签名失利。
        以下是rasutil

/**
 * 
 */
package com.hlmedicals.app.util;
import Java.io.UnsupportedEncodingException;
import java.security.KeyFactory;
import java.security.PrivateKey;
import java.security.PublicKey;
import java.security.spec.PKCS8EncodedKeySpec;
import java.security.spec.X509EncodedKeySpec;
import com.itextpdf.xmp.impl.Base64;
/**
 * @author dell
 *
 */
public class RsaUtil {
    public static void main (String [] args){
        try {
            byte[]  privateKeyString= IConst.privateKeyString.getBytes("utf-8");
            byte[]  publicKeyString= IConst.publicKeyString.getBytes("utf-8");
            String data1 = "testabc"; 
            //siyao签名
            byte[] data=data1.getBytes("utf-8");
            byte[] s = sign(data, privateKeyString);
            boolean b=verify(data,s,publicKeyString);
            System.out.println(b);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }  
           }
    /** 
     * 运用私钥对数据进行加密签名 
     * @param data 数据 
     * @param privateKeyString 私钥 
     * @return 加密后的签名 
     */  
    public static byte[] sign(byte[] data, byte[] privateKeyString) throws Exception {  
        KeyFactory keyf = KeyFactory.getInstance("RSA");  
        PrivateKey privateKey = keyf.generatePrivate(new PKCS8EncodedKeySpec(Base64.de code(privateKeyString)));  
        java.security.Signature signet = java.security.Signature.getInstance("SHA1with RSA");  
        signet.initSign(privateKey);  
        signet.update(data);  
        byte[] signed = signet.sign();  
        return Base64.encode(signed);  
    }  
    /** 
     * 运用公钥判别签名是否与数据匹配 
     * @param data 数据 
     * @param sign 签名 
     * @param publicKeyString 公钥 
     * @return 是否篡改了数据 
     */  
    public static boolean verify(byte[] data, byte[] sign, byte[] publicKeyString) thr ows Exception {  
        KeyFactory keyf = KeyFactory.getInstance("RSA");
         PublicKey publicKey = keyf.generatePublic(new X509EncodedKeySpec(Base64.decode (publicKeyString)));  
        java.security.Signature signet = java.security.Signature.getInstance("SHA1with RSA");  
        signet.initVerify(publicKey);  
        signet.update(data);  
        return signet.verify(Base64.decode(sign));  
    } 
}



  • http 转成htts


  • 后台登录要有验证码,没有验证码 ,体系会被爆炸,验证码不能被屡次运用。

我的项目登录成功后把验证码存在session里。要把session验证码设定为空就能够。


  • 体系上传文件时分,应该上传白名单的文件类型,避免jsp、jspx在体系中履行导致体系崩 掉。

        在开发过程中,必定会有和第三方或许app端的接口调用。在调用的时分,怎么来确保不合法链 接或许歹意进犯呢?

签名
        依据用户名或许用户id,结合用户的ip或许设备号,生成一个token。在恳求后台,后台获取 http的head中的token,校验是否合法(和数据库或许Redis中记载的是否共同,在登录或许初 始化的时分,存入数据库/redis)。

        在运用Base64方法的编码后,Token字符串仍是有20多位,有的时分仍是嫌它长了。因为GUID 自身就有128bit,在要求有杰出的可读性的前提下,很难进一步改进了。那咱们怎么发生更短 的字符串呢?还有一种方法便是较少Token的长度,不必GUID,而选用必定长度的随机数,A8站源码交易平台例如64bit,再用Base64编码表示:


    var rnd = new Random();
    var tokenData = userIp+userId;
    rnd.NextBytes(tokenData);
    var token = Convert.ToBase64String(tokenData).TrimEnd('=');



        因为这儿只用了64bit,此刻得到的字符串为Onh0h95n7nw的方法,长度要短一半。A8站源码交易平台这样就方 便带着多了。可是这种方法是没有唯一性确保的。不过用来作为身份认证的方法仍是能够的 (如网盘的提取码)。

加密
客户端和服务器都保存一个秘钥,每次传输都加密,服务端依据秘钥解密。

客户端:
1、设置一个key(和服务器端相同)
2、依据上述key对恳求进行某种加密(加密有必要是可逆的,以便服务器端解密)
3、发送恳求给服务器

服务器端:
1、设置一个key
2、依据上述的key对恳求进行解密(校验成功便是「信赖」的客户端发来的数据,不然回绝 呼应)
3、处理事务逻辑并发生成果
4、将成果反馈给客户端

A8站源码交易平台



  • 全部评论(0)
最新发布的资讯信息
【A8站-免费源码分享|直播源码】直播系统源码开发:关于安卓开发工具和obs直播推流(2020-10-30 09:41)
【计算机/互联网|】【独家修复】用户定制版短视频点赞系统,支持抖音+快手+刷宝+微视等所有主流短视频评论系统源码(2020-10-26 16:34)
【技术宅-为技术而疯|网站架设教程】【独家首发】最新更新已对接短信2020全新抖音快手点赞任务系统霸屏天下小红书头条威客兼职完整搭建架设视频教程(2020-10-25 13:56)
【技术宅-为技术而疯|网站架设教程】最新可用个人发卡网系统源码完整搭建架设视频教程(2020-10-25 10:53)
【技术宅-为技术而疯|网站架设教程】独家更新全新V10抢单系统唯品会京东淘宝自动抢单区块系统源码全开源抢单收单接单返利+搭建架设完整视频教程(2020-10-25 10:52)
【计算机/互联网|】柔丫纸尿裤云仓系统源码部署(2020-10-15 18:13)
【计算机/互联网|】侏罗纪软件模式定制开发(2020-10-14 15:33)
【计算机/互联网|】S2b2C供应商系统 营销闭环(2020-10-10 17:46)
【计算机/互联网|程序设计开发】盛都汇系统奖励机制(2020-10-10 17:20)
【A8站-免费源码分享|网站源码】积分商城系统APP开发(2020-09-23 14:56)
联系我们
Q Q:3101359898 点击直接对话
电话:18580901894
邮箱:admin#a8zhan.com
时间:09:00 - 24:00
手机二维码 访问手机版
返回顶部