zoukankan      html  css  js  c++  java
  • 云服务AppId或AppKey和AppSecret生成策略

    App key和App Secret

    App key简称API接口验证序号,是用于验证API接入合法性的。接入哪个网站的API接口,就需要这个网站允许才能够接入,如果简单比喻的话:可以理解成是登陆网站的用户名。

    App Secret简称API接口密钥,是跟App Key配套使用的,可以简单理解成是密码。

    App Key 和 App Secret 配合在一起,通过其他网站的协议要求,就可以接入API接口调用或使用API提供的各种功能和数据。 

    比如淘宝联盟的API接口,就是淘宝客网站开发的必要接入,淘客程序通过API接口直接对淘宝联盟的数据库调用近亿商品实时数据。做到了轻松维护,自动更新。

    UUID

    UUID是指在一台机器在同一时间中生成的数字在所有机器中都是唯一的。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字
    UUID由以下几部分的组合:
    (1)当前日期和时间。
    (2)时钟序列。
    (3)全局唯一的IEEE机器识别号,如果有网卡,从网卡MAC地址获得,没有网卡以其他方式获得。
    标准的UUID格式为:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx (8-4-4-4-12),以连字号分为五段形式的36个字符,示例:550e8400-e29b-41d4-a716-446655440000
    Java标准类库中已经提供了UUID的API。

    UUID.randomUUID() 
    

    我采用的是短8位UUID方式。

    代码实现

    import java.security.MessageDigest;
    import java.security.NoSuchAlgorithmException;
    import java.util.Arrays;
    import java.util.UUID;
    
    /**
     * @author mazhq
     * @Title: AppUtils
     * @Description: 随机产生唯一的app_key和app_secret
     * @date 2019/8/27 16:12
     */
    public class AppUtils {
        //生成 app_secret 密钥
        private final static String SERVER_NAME = "mazhq_abc123";
        private final static String[] chars = new String[]{"a", "b", "c", "d", "e", "f",
                "g", "h", "i", "j", "k", "l", "m", "n", "o", "p", "q", "r", "s",
                "t", "u", "v", "w", "x", "y", "z", "0", "1", "2", "3", "4", "5",
                "6", "7", "8", "9", "A", "B", "C", "D", "E", "F", "G", "H", "I",
                "J", "K", "L", "M", "N", "O", "P", "Q", "R", "S", "T", "U", "V",
                "W", "X", "Y", "Z"};
    
        /**
         * @Description: <p>
         * 短8位UUID思想其实借鉴微博短域名的生成方式,但是其重复概率过高,而且每次生成4个,需要随即选取一个。
         * 本算法利用62个可打印字符,通过随机生成32位UUID,由于UUID都为十六进制,所以将UUID分成8组,每4个为一组,然后通过模62操作,结果作为索引取出字符,
         * 这样重复率大大降低。
         * 经测试,在生成一千万个数据也没有出现重复,完全满足大部分需求。
         * </p>
         * @author mazhq
         * @date 2019/8/27 16:16
         */
        public static String getAppId() {
            StringBuffer shortBuffer = new StringBuffer();
            String uuid = UUID.randomUUID().toString().replace("-", "");
            for (int i = 0; i < 8; i++) {
                String str = uuid.substring(i * 4, i * 4 + 4);
                int x = Integer.parseInt(str, 16);
                shortBuffer.append(chars[x % 0x3E]);
            }
            return shortBuffer.toString();
    
        }
    
        /**
         * <p>
         * 通过appId和内置关键词生成APP Secret
         * </P>
         * @author mazhq
         * @date 2019/8/27 16:32
         */
        public static String getAppSecret(String appId) {
            try {
                String[] array = new String[]{appId, SERVER_NAME};
                StringBuffer sb = new StringBuffer();
                // 字符串排序
                Arrays.sort(array);
                for (int i = 0; i < array.length; i++) {
                    sb.append(array[i]);
                }
                String str = sb.toString();
                MessageDigest md = MessageDigest.getInstance("SHA-1");
                md.update(str.getBytes());
                byte[] digest = md.digest();
    
                StringBuffer hexstr = new StringBuffer();
                String shaHex = "";
                for (int i = 0; i < digest.length; i++) {
                    shaHex = Integer.toHexString(digest[i] & 0xFF);
                    if (shaHex.length() < 2) {
                        hexstr.append(0);
                    }
                    hexstr.append(shaHex);
                }
                return hexstr.toString();
            } catch (NoSuchAlgorithmException e) {
                e.printStackTrace();
                throw new RuntimeException();
            }
        }
    
        public static void main(String[] args) {
            String appId = getAppId();
            String appSecret = getAppSecret(appId);
            System.out.println("appId: "+appId);
            System.out.println("appSecret: "+appSecret);
        }
    }
    

      运行结果输出:

    appId: Jx3wQMD1
    appSecret: d68397c4fb671bc024e24e1964b067cc35388818
    

      

  • 相关阅读:
    MS CRM 2011 RC中的新特性(4)——活动方面之批量编辑、自定义活动
    最近的一些有关MS CRM 2011的更新
    MS CRM 2011 RC中的新特性(6)——连接
    MS CRM 2011 RC中的新特性(7)—仪表板
    参加MS CRM2011深度培训课程——第一天
    MS CRM 2011插件调试工具
    MS CRM2011实体介绍(四)——目标管理方面的实体
    MS CRM 2011 RC中的新特性(3)——客户服务管理方面
    MS CRM 2011 RC中的新特性(8)—数据管理
    ExtAspNet 登陆
  • 原文地址:https://www.cnblogs.com/owenma/p/11419341.html
Copyright © 2011-2022 走看看