第十四章

一、集成Alipay

1、打开支付宝平台登录账号
https://open.alipay.com/platform/home.htm
直接支付宝扫码登录
2、找到开发服务-沙箱
https://opendocs.alipay.com/open/200/105311/
https://openhome.alipay.com/platform/appDaily.htm
3、使用工具生成公钥和私钥、配置沙箱环境
https://opendocs.alipay.com/open/291/105971

图片.png

4、配置沙箱环境,将生成的公钥填入沙箱
图片.png

5、下载沙箱钱包
https://sandbox.alipaydev.com/user/downloadApp.htm
6、登陆沙箱钱包
图片.png

7、下载demo
https://opendocs.alipay.com/open/54/104509
8、修改demo中的配置
需要修改APPID,PID,TARGET_ID,RSA2_PRIVATE
在onCreate中新增:EnvUtils.setEnv(EnvUtils.EnvEnum.SANDBOX);
9、PID别填错
图片.png

10、运行
图片.png

二、

1、Base64

    private void base64Demo() {
        String str = "Simon";
        String strOut = Base64.encodeToString(str.getBytes(), Base64.DEFAULT);
        Log.i("Simon", "" + strOut);
        byte[] bytes = Base64.decode(strOut, Base64.DEFAULT);
        Log.i("Simon", "" + new String(bytes));
    }

2、MD5

字符串

    private void md5Demo() throws NoSuchAlgorithmException {
        String str = "Simon";
        MessageDigest messageDigest = MessageDigest.getInstance("md5");
        messageDigest.update(str.getBytes());
        String ret = new BigInteger(1, messageDigest.digest()).toString(16);
        Log.i("Simon", "ret: " + ret);
    }

文件

    public static String getFileMD5(File file) {
        if (!file.isFile()) {
            return null;
        }
        MessageDigest digest = null;
        FileInputStream in = null;
        byte buffer[] = new byte[1024];
        int len;
        try {
            digest = MessageDigest.getInstance("MD5");
            in = new FileInputStream(file);
            while ((len = in.read(buffer, 0, 1024)) != -1) {
                digest.update(buffer, 0, len);
            }
            in.close();
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
        return new BigInteger(1, digest.digest()).toString(16);
    }

3、sha

    //sha-256 摘要,加密
    private String shaDemo(String strSrc) {
        MessageDigest sha = null;
        byte[] bt = strSrc.getBytes();
        try {
            sha = MessageDigest.getInstance("SHA-256");// 将此换成SHA-1、SHA-512、SHA-384等参数
            sha.update(bt);
            return new BigInteger(1, sha.digest()).toString(16);
        } catch (NoSuchAlgorithmException e) {
            return null;
        }
    }

4、DES(对称)

    //DES 对称加密
    private void desDemo(String input) throws NoSuchPaddingException, NoSuchAlgorithmException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException, InvalidKeySpecException {
        //AES加密只需要将DES改成AES即可
        //1,得到cipher 对象(可翻译为密码器或密码系统)
        //初始化cipher 对象时可以指定更详细的参数
        //格式:”algorithm/mode/padding” ,即”算法/工作模式/填充模式” 具体看http://blog.csdn.net/axi295309066/article/details/52491077的最后面
        Cipher cipher = Cipher.getInstance("DES");

        //2,创建秘钥
        //方式0
//        SecretKey key = KeyGenerator.getInstance("DES").generateKey();
        //方式一
//        KeySpec keySpec = new DESKeySpec("12345678".getBytes()); //12345678为自定义密钥
//        SecretKeyFactory secretKeyFactory = SecretKeyFactory.getInstance("DES");//DES处参数填加密模式
//        Key key = secretKeyFactory.generateSecret(keySpec);
        //方式二:
        Key key = new SecretKeySpec("12345678".getBytes(), "DES");

        //加密
        //3,设置操作模式(加密/解密)
        cipher.init(Cipher.ENCRYPT_MODE, key);
        //4,执行加密
        byte[] relBytes = cipher.doFinal(input.getBytes());
        //注意:加密过后用Base64编码 缺少这步会导致解密失败
        byte[] relBase = Base64.encode(relBytes, Base64.DEFAULT);
        String encodeStr = new String(relBase);
        Log.d("Simon", "des ENCRYPT_MODE: " + encodeStr);

        //解密
        //3,设置操作模式(加密/解密)
        cipher.init(Cipher.DECRYPT_MODE, key);
        //4,执行解密
        //先用Base64解密 缺少Base64编码会导致解密失败
        byte[] decode = Base64.decode(encodeStr, Base64.DEFAULT);
        byte[] bytes = cipher.doFinal(decode);
        String decodeStr = new String(bytes);
        Log.d("Simon", "des DECRYPT_MODE: " + decodeStr);
    }

5、

//非对称加密,rsa
public class RSAUtils {
    public void demo() throws Exception {
        HashMap<String, Object> kes = initkeys();
        Key key = (Key) kes.get("public_key");
        Key key1 = (Key) kes.get("private_key");
        byte[] pubKey = key.getEncoded(); //公钥
        byte[] priKey = key1.getEncoded(); //私钥
        Log.i("Simon", "公钥:" + Base64.encode(pubKey, Base64.DEFAULT) + "  私钥:" + Base64.encode(priKey, Base64.DEFAULT));
        String str = "加密内容";
        Log.i("Simon", "原文:" + Base64.encode(str.getBytes(), Base64.DEFAULT));
        byte[] code1 = encryptByPublickey(str.getBytes(), pubKey);
        Log.i("Simon", "公钥加密后的数据:" + Base64.encode(code1, Base64.DEFAULT));
        byte[] code2 = decryptByPrivateKey(code1, priKey);
        Log.i("Simon", "私钥解密后的数据:" + Base64.encode(code2, Base64.DEFAULT).toString() + "  " + new String(code2));
    }

    private HashMap<String, Object> initkeys() throws NoSuchAlgorithmException {
        KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance("RSA");
        keyPairGenerator.initialize(512);
        KeyPair pair = keyPairGenerator.generateKeyPair();
        PublicKey aPublic = pair.getPublic(); //公钥
        PrivateKey aPrivate = pair.getPrivate(); //私钥
        HashMap<String, Object> keys = new HashMap<>();
        keys.put("public_key", aPublic);
        keys.put("private_key", aPrivate);
        return keys;
    }

    /**
     * 公钥加密
     *
     * @return
     */
    private byte[] encryptByPublickey(byte[] data, byte[] publickey) throws Exception {
        KeyFactory keyFactory = KeyFactory.getInstance("RSA"); //获得key工厂
        X509EncodedKeySpec x509EncodedKeySpec = new X509EncodedKeySpec(publickey); //X509EncodedKeySpec公钥的解码类
        PublicKey publicKey = keyFactory.generatePublic(x509EncodedKeySpec);//获得公钥
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());//Cipher负责加密解密
        cipher.init(Cipher.ENCRYPT_MODE, publicKey);
        return cipher.doFinal(data);
    }

    /**
     * 私钥解密
     *
     * @param data 待解密数据
     * @param key  密钥
     * @return byte[] 解密数据
     */
    private byte[] decryptByPrivateKey(byte[] data, byte[] key) throws Exception {
        //取得私钥
        PKCS8EncodedKeySpec pkcs8KeySpec = new PKCS8EncodedKeySpec(key);
        KeyFactory keyFactory = KeyFactory.getInstance("RSA");
        //生成私钥
        PrivateKey privateKey = keyFactory.generatePrivate(pkcs8KeySpec);
        //数据解密
        Cipher cipher = Cipher.getInstance(keyFactory.getAlgorithm());
        cipher.init(Cipher.DECRYPT_MODE, privateKey);
        return cipher.doFinal(data);
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,504评论 6 496
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,434评论 3 389
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 160,089评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,378评论 1 288
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,472评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,506评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,519评论 3 413
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,292评论 0 270
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,738评论 1 307
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,022评论 2 329
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,194评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,873评论 5 338
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,536评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,162评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,413评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,075评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,080评论 2 352

推荐阅读更多精彩内容