21:数据拼接MD5加密

1:数据拼接

public RequestParams makeDataSearch(RequestParams mRequestParams){
        String[][] detaDetail = { { "amount", amount }, {"app_id", appid},{ "auth_code", payCode },
                { "busi_code", mSettings.getValue("storeId") },
                { "dev_id",  mSettings.getValue("terminalId") }, { "down_trade_no", orderNo }, { "good_details", "aa" }, { "oper_id", "01" },
                { "raw_data", "11" }, { "undiscountable_amount", amount }, { "subject", "aa" }, {"timestamp", timestamp}, {"version", "v43"}};
        return MakeDataDetail(detaDetail, mRequestParams);
    }

public RequestParams MakeDataDetail(String[][] dataDeatil, RequestParams mRequestParams) {
        HashMap<String, String> params = new HashMap<String, String>();
        for (int i = 0; i < dataDeatil.length; i++) {
            params.put(dataDeatil[i][0], dataDeatil[i][1]);// 获取sign使用
            mRequestParams.addBodyParameter(dataDeatil[i][0], dataDeatil[i][1]);
        }
        StringBuilder data = new StringBuilder((params.size() + 1) * 10);
        buildPayParams(data, params, false);
        String dataWithMd5 = Md5Utils.sign(data.append("&APP_SECRET=BTOOuffLDoVTPZsgDZgGapXsoBeKvTMT").toString(), "", "UTF-8").toUpperCase();
        mRequestParams.addBodyParameter("sign", dataWithMd5);
        return mRequestParams;
    }

public void buildPayParams(StringBuilder sb, Map<String, String> payParams, boolean encoding) {
        List<String> keys = new ArrayList<String>(payParams.keySet());
        Collections.sort(keys);
        for (String key : keys) {
            sb.append(key).append("=");
            if (encoding) {
                sb.append(urlEncode(payParams.get(key)));
            } else {
                sb.append(payParams.get(key));
            }
            sb.append("&");
        }
        sb.setLength(sb.length() - 1);
    }

    public String urlEncode(String str) {
        try {
            return URLEncoder.encode(str, "UTF-8");
        } catch (Throwable e) {
            return str;
        }
    }

2:MD5加密

public class Md5Utils{

    /**
     * 签名字符串
     * @param text 需要签名的字符串
     * @param key 密钥
     * @param input_charset 编码格式
     * @return 签名结果
     */
    public static String sign(String text, String key, String input_charset) {
        text = text + key;
        return org.apache.commons.codec.digest.
                DigestUtils.md5Hex(getContentBytes(text, input_charset));
    }

    /**
     * 签名字符串
     * @param text 需要签名的字符串
     * @param sign 签名结果
     * @param key 密钥
     * @param input_charset 编码格式
     * @return 签名结果
     */
    public static boolean verify(String text, String sign, String key, String input_charset) {
        text = text + key;
        String mysign = org.apache.commons.codec.digest.
                  DigestUtils.md5Hex(getContentBytes(text, input_charset));
        if(mysign.equals(sign)) {
            return true;
        }
        else {
            return false;
        }
    }

    /**
     * @param content
     * @param charset
     * @return
     * @throws SignatureException
     * @throws UnsupportedEncodingException
     */
    private static byte[] getContentBytes(String content, String charset) {
        if (charset == null || "".equals(charset)) {
            return content.getBytes();
        }
        try {
            return content.getBytes(charset);
        } catch (UnsupportedEncodingException e) {
            throw new RuntimeException("Md5Utils签名过程中出现错误,指定的编码集不对,您目前指定的编码集是:" + charset);
        }
    }

原文地址:https://www.cnblogs.com/wnpp/p/9480483.html

时间: 2024-10-08 18:06:44

21:数据拼接MD5加密的相关文章

java 字符按字母排序-拼接-md5加密-大写

package yixin; import java.security.MessageDigest;import java.util.Arrays; public class data_change {                                          static char[] HEX_DIGITS = {'0','1','2','3','4','5','6','7','8','9','a','b','c','d','e','f'}; //HEX_DIGITS为

[Swift通天遁地]七、数据与安全-(18)使用Swift实现原生的MD5加密

本文将演示如何使用Swift实现原生的MD5加密. 首先创建一个桥接头文件,因为需要使用到OC语言的通用加密解密类库. 在项目文件夹[DemoApp]上点击鼠标右键,弹出右键菜单. [New File]->[Header File]->[Next]->[Save As]:Header.h->[Create] 在该文件中,添加需要引用到的框架. 1 //添加需要引用到的框架. 2 #ifndef _4_1_2SecurityProject_MD5_Bridging_Header_h

Java实现MD5加密和文件校验

MD5简介: MD5的全称:Message-Digest Algorithm 5(信息-摘要算法5) MD5的加密方式是一种哈希加密.一些主流的编程语言都已经实现了MD5的加密,所以如果你的程序或是系统涉及到在多种语言之间的校验,那么MD5可以是备选之一.不过因为MD5是采用哈希函数来进行的加密,所以它无关密钥,也就是说在确定了明文的情况下,MD5就可以加密.不过MD5是不可逆的,只能加密,不能解密. MD5加密字符串: public class Md5Util { // 标准的构造函数,调用m

Java 语言实现 MD5 加密

Java 语言实现 MD5 加密 背景说明 在实际项目中,为了安全性考虑,经常要求账号密码是以加密后的密文形式,保存到数据库中. 这样,即使有人获取到了数据库中的密文密码,也不知道明文密码信息是什么,从而防止系统被恶意访问. 密码加密有很多种方式,比如:Base64,DSA,RSA,MD5,SHA128,SHA256,SHA512等加密方式. 本文主要讲述 MD5 加密方式. MD5 简介 MD5 消息摘要算法(英文:MD5 Message-Digest Algorithm),一种被广泛使用的密

手机安全卫士------手机防盗页面之自定义对话框&amp;MD5加密

功能需求: 用户点击主页面上的"手机防盗"按钮时,判断用户是否设置过密码. 如果没有设置过,则弹出输入密码对话框 如果设置过了,则弹出设置密码对话框 用户的密码要进行MD5加密之后再存储在内存中 技术点: - 自定义对话框的使用 - MD5加密的实现方式 - SharedPreferences的读写操作 自定义对话框 1.在layout目录下创建一个布局文件,把自定义的对话框布局设置成功 具体代码实现如下 设置密码对话框的布局代码: <?xml version="1.0

找回MD5加密的密码及MD5加密数据库中数据

有时,在开发过程中,如果不小心更改掉了项目管理员帐号的密码而又忘了,存在数据库里的密码又是MD5加密后的,这时候怎么办?最为菜鸟的我,刚开始也很迷茫,不过向前辈们请教了请教,自己也查了查资料,特意整理记录一下,并分享给大家. 前提是你知道这个密码存在在哪个表的哪个字段,只不过是加密了,如果是oracle数据库的话,可以用DBMS_OBFUSCATION_TOOLKIT.MD5 ( input => utl_raw.cast_to_raw('预置密码'))来得到一个MD5加密后的密码, 所以我们可

md5() 加密password,数据库字段长度要够(eg:varchar(30)),丢失部分数据,导致登录不上

bug经历: 密码在用md5加密以后存储在数据库中,由于password字段的长度设置过小(eg:varchar(30)),导致数据库中只存储了一部分md5加密后的结果,导致登录不上去,把password字段的长度扩大(eg:varchar(100)),更新一下数据库结果,就可登录了.

4、C#进阶:MD5加密、进程、线程、GDI+、XML、委托

MD5加密 将字符串进行加密,无法解密.网上的解密方式也都是在库里找,找不到也没有. 1 protected void Page_Load(object sender, EventArgs e) 2 { 3 string s = "123"; 4 Response.Write(getMd5(s)); 5 } 6 public string getMd5(string str) 7 { 8 MD5 md5 = MD5.Create();//MD5抽象类无法实例化 实例化该方法 9 byt

Android对敏感数据进行MD5加密(基础回顾)

1.在工具类的包下新建一个进行md5加密的工具类MD5Utils.java 1 package com.example.mobilesafe.utils; 2 import java.security.MessageDigest; 3 import java.security.NoSuchAlgorithmException; 4 public class MD5Utils { 5 /** 6 * md5加密方法 7 * @param password 8 * @return 9 */ 10 p