资讯专栏INFORMATION COLUMN

开放平台核心功能--授权

galaxy_robot / 2858人阅读

摘要:系统交互流程授权码生成加密解密算法算法名称算法名称加密模式填充方式编码生成密钥对象密钥字符串密钥对象加密数据待加密数据密钥加密后的数据实例化对象,它用于完成实际的加密操作初始化对象,设置为加密模式执行加密操作。

系统交互流程(OAuth2.0)

授权码生成 加密解密算法(AES)
import org.apache.commons.codec.binary.Base64;

import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.security.InvalidKeyException;
import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.spec.InvalidKeySpecException;

/**
 * @author liuzhongxu
 * @date 2019/4/16
 */
public class AESUtil {
    /**
     * 算法名称
     */
    public static final String KEY_ALGORITHM = "AES";
    /**
     *算法名称/加密模式/填充方式
     */
    public static final String CIPHER_ALGORITHM = "AES/CBC/PKCS5Padding";
    /**
     * 编码
     */
    public static final String CHARSET_NAME = "UTF-8";

    /**
     *
     * 生成密钥key对象
     * @param keyStr 密钥字符串
     * @return 密钥对象
     * @throws InvalidKeyException
     * @throws NoSuchAlgorithmException
     * @throws InvalidKeySpecException
     * @throws Exception
     */
    private static SecretKey keyGenerator(String keyStr) throws Exception {
        SecretKeySpec secretKey = new SecretKeySpec(keyStr.getBytes(CHARSET_NAME), KEY_ALGORITHM);
        return secretKey;
    }
    /**
     * 加密数据
     * @param data 待加密数据
     * @param key 密钥
     * @return 加密后的数据
     */
    public static String encrypt(String data, String key) throws Exception {
        Key secretKey = keyGenerator(key);
        IvParameterSpec iv = new IvParameterSpec(key.getBytes(CHARSET_NAME));
        // 实例化Cipher对象,它用于完成实际的加密操作
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
        // 初始化Cipher对象,设置为加密模式
        cipher.init(Cipher.ENCRYPT_MODE, secretKey, iv);
        byte[] results = cipher.doFinal(data.getBytes(CHARSET_NAME));
        // 执行加密操作。加密后的结果通常都会用Base64编码进行传输
        return Base64.encodeBase64String(results);
    }
    /**
     * 解密数据
     * @param data 待解密数据
     * @param key 密钥
     * @return 解密后的数据
     */
    public static String decrypt(String data, String key) throws Exception {
        Key secretKey = keyGenerator(key);
        IvParameterSpec iv = new IvParameterSpec(key.getBytes(CHARSET_NAME));
        Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
        //初始化Cipher对象,设置为解密模式
        cipher.init(Cipher.DECRYPT_MODE, secretKey, iv);
        // 执行解密操作
        return new String(cipher.doFinal(Base64.decodeBase64(data)));
    }
    public static void main(String[] args) throws Exception {
        String source = "工作模式-->>ECB:电子密码本模式、CBC:加密分组链接模式、CFB:加密反馈模式、OFB:输出反馈模式";
        System.out.println("原文: " + source);
        String key = "A1B2C3D4A1B2C3D4";
        String encryptData = encrypt(source, key);
        System.out.println("加密后: " + encryptData);
        String decryptData = decrypt(encryptData, key);
        System.out.println("解密后: " + decryptData);
    }
}
计算签名
    /**
     * 计算签名
     */
    private static String calculateSign(String source, String accessSecret) throws InvalidKeyException {
        try {
            //HmacSHA256加密
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(accessSecret.getBytes("UTF-8"), "HmacSHA256"));
            byte[] signData = mac.doFinal(source.getBytes("UTF-8"));
            //bas64加密
            return Base64.getEncoder().encodeToString(signData);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException("HMAC-SHA1 not supported.");
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("UTF-8 not supported.");
        }
 
    }

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/77703.html

相关文章

  • 5G时代的边缘计算丨文末赠书

    摘要:于年成立移动边缘计算规范工作组,正式宣布推动移动边缘计算标准化工作。其基本思想是把云计算平台从移动核心网络内部迁移到移动接入网边缘,实现计算及存储资源的弹性利用。 本文选自最近人民邮电出版社新书《从云端到边缘:边缘计算的产业链与行业应用》第一章第二节5G时代的边缘计算,作者吴冬升,5G产...

    xietao3 评论0 收藏0
  • 基于oauth 2.0 实现第三方开放平台

    摘要:本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。它的特点就是通过客户端的后台服务器,与服务提供商的认证服务器进行互动能够满足绝大多数开放平台认证授权的需求。 本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。 什么是开放平台 通过开放自己平台产品服务的各种API接口,让其他第三方开发者在开发应用时根据需求直接调用,例如微信登录、QQ登录、微信支付、微博登录...

    Simon 评论0 收藏0
  • 基于oauth 2.0 实现第三方开放平台

    摘要:本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。它的特点就是通过客户端的后台服务器,与服务提供商的认证服务器进行互动能够满足绝大多数开放平台认证授权的需求。 本文单纯从简单的技术实现来讲,不涉及开放平台的多维度的运营理念。 什么是开放平台 通过开放自己平台产品服务的各种API接口,让其他第三方开发者在开发应用时根据需求直接调用,例如微信登录、QQ登录、微信支付、微博登录...

    xiaodao 评论0 收藏0
  • 云适配开放平台内测“挑刺有奖” :赢土豪金

    2013年,你是甲方,我是乙方,我为你云适配。 2014年,我的地盘你做主,云适配攻城狮们的工作阵地将全权授权给你,你可以自由的 DIY 您的网站,No more time,No Money,只要1天,只要1个人,只要2步,云适配开放平台一站搞定,您的跨屏网站即刻诞生了!!! BUT,BUT,BUT,在你开始完全做主前,我们想邀请您来参与云适配开放平台的内测,只要您具备最基础的前端开发技术,拥有一...

    vvpale 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<