Java三行代码搞定MD5加密,测试5c短信网关的demo

看到之前项目中,关于MD5加密的足足写了一个辅助类。

其实在Java中大部分都帮你实现好了,完成MD5加密,主要就三行代码:

/**
     * 对字符串md5加密
     *
     * @param str
     * @return
     * @throws SaslException 
     */
    public static String getMD5(String str){
        try {
            // 生成一个MD5加密计算摘要
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 计算md5函数
            md.update(str.getBytes());
            // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
            // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
            return new BigInteger(1, md.digest()).toString(16);
        } catch (Exception e) {
            System.out.println("MD5加密出现错误");
            return "";
        }
    }

 

另附一个测试短信网关的demo:

import java.io.BufferedReader;
import java.io.InputStreamReader;
import java.math.BigInteger;
import java.net.HttpURLConnection;
import java.net.URL;
import java.net.URLEncoder;
import java.security.MessageDigest;


/**
 * username  用户名
 * password_md5   密码
 * mobile  手机号
 * apikey  apikey秘钥
 * content  短信内容
 * startTime  UNIX时间戳,不写为立刻发送,http://tool.chinaz.com/Tools/unixtime.aspx (UNIX时间戳网站)
 * success:msgid  提交成功。
error:msgid  提交失败  
error:Missing username  用户名为空
error:Missing password  密码为空
error:Missing apikey  APIKEY为空
error:Missing recipient  手机号码为空
error:Missing message content  短信内容为空
error:Account is blocked  帐号被禁用
error:Unrecognized encoding  编码未能识别
error:APIKEY or password_md5 error  APIKEY或密码错误
error:Unauthorized IP address  未授权 IP 地址
error:Account balance is insufficient  余额不足
 */

/**
 * 乱码问题处理:
 * 1、GBK编码提交的 首先urlencode短信内容(content),然后在API请求时,带入encode=gbk
 * 2、UTF-8编码的
 * 将content 做urlencode编码后,带入encode=utf8或utf-8
 * http://m.5c.com.cn/api/send/index.php?username=XXX&password_md5=XXX&apikey=XXX&mobile=XXX&content=%E4%BD%A0%E5%A5%BD%E6%89%8D%E6%94%B6%E7%9B%8A%E9%9F%A6&encode=utf8
 * 示例
 */

public class sendSMS {
    public static void main(String[] args) {
        // 连接超时及读取超时设置
        System.setProperty("sun.net.client.defaultConnectTimeout", "30000"); // 连接超时:30秒
        System.setProperty("sun.net.client.defaultReadTimeout", "30000"); // 读取超时:30秒

        // 新建一个StringBuffer链接
        StringBuffer buffer = new StringBuffer();

        // String encode = "GBK";
        // //页面编码和短信内容编码为GBK。重要说明:如提交短信后收到乱码,请将GBK改为UTF-8测试。如本程序页面为编码格式为:ASCII/GB2312/GBK则该处为GBK。如本页面编码为UTF-8或需要支持繁体,阿拉伯文等Unicode,请将此处写为:UTF-8

        String encode = "UTF-8";

        String username = "xxx"; // 用户名

        String password_md5 = getMD5("xxx"); // 密码

        String mobile = ""; // 手机号,只发一个号码:13800000001。发多个号码:13800000001,13800000002,...N
                            // 。使用半角逗号分隔。

        String apikey = "xxxxxxxxxx"; // apikey秘钥(请登录 http://m.5c.com.cn
                            // 短信平台-->账号管理-->我的信息 中复制apikey)

        String content = "您好,您的验证码是:1234567【xxx】"; // 要发送的短信内容,特别注意:签名必须设置,网页验证码应用需要加添加【图形识别码】。

        try {

            String contentUrlEncode = URLEncoder.encode(content, encode); // 对短信内容做Urlencode编码操作。注意:如

            // 把发送链接存入buffer中,如连接超时,可能是您服务器不支持域名解析,请将下面连接中的:【m.5c.com.cn】修改为IP:【115.28.23.78】
            buffer.append("http://m.5c.com.cn/api/send/index.php?username=" + username + "&password_md5=" + password_md5
                    + "&mobile=" + mobile + "&apikey=" + apikey + "&content=" + contentUrlEncode + "&encode=" + encode);

            // System.out.println(buffer); //调试功能,输入完整的请求URL地址

            // 把buffer链接存入新建的URL中
            URL url = new URL(buffer.toString());

            // 打开URL链接
            HttpURLConnection connection = (HttpURLConnection) url.openConnection();

            // 使用POST方式发送
            connection.setRequestMethod("POST");

            // 使用长链接方式
            connection.setRequestProperty("Connection", "Keep-Alive");

            // 发送短信内容
            BufferedReader reader = new BufferedReader(new InputStreamReader(url.openStream()));

            // 获取返回值
            String result = reader.readLine();

            // 输出result内容,查看返回值,成功为success,错误为error,详见该文档起始注释
            System.out.println(result);

        } catch (Exception e) {
            e.printStackTrace();
        }

    }
    
    /**
     * 对字符串md5加密
     * @param str
     * @return
     * @throws SaslException 
     */
    public static String getMD5(String str){
        try {
            // 生成一个MD5加密计算摘要
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 计算md5函数
            md.update(str.getBytes());
            // digest()最后确定返回md5 hash值,返回值为8为字符串。因为md5 hash值是16位的hex值,实际上就是8位的字符
            // BigInteger函数则将8位的字符串转换成16位hex值,用字符串来表示;得到字符串形式的hash值
            return new BigInteger(1, md.digest()).toString(16);
        } catch (Exception e) {
            System.out.println("MD5加密出现错误");
            return "";
        }
    }
}

 

 error:Unauthorized IP address ,please login to your account [qhyrkj] and add '183.14.167.102' to the IP white list. 
报上面错误说明你的ip不在授权范围内,被短信网关限制了,可以申请加入IP或者换成动态IP。
 
posted @ 2016-12-28 13:17  大自然的流风  阅读(1327)  评论(0编辑  收藏  举报