看到之前项目中,关于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。
 

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

  1. Java三行代码搞定MD5加密

    Java三行代码搞定MD5加密 https://www.dexcoder.com/selfly/article/4026 public class MD5Test { public static vo ...

  2. flask跨域请求三行代码搞定

    flask跨域请求三行代码就可以搞定.但是请注意几点: 第一:只能返回json格式数据,比如list.ndarray等都不可以 第二:返回的对象必须是是字符串.元组.响应实例或WSGI可调用. pyt ...

  3. jquery写tab切换,三行代码搞定

    <script type="text/javascript"> $("button").on("click",function( ...

  4. Linux(ubuntu) 三行代码搞定安装谷歌浏览器

    wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb 然后再输入: sudo dpkg -i g ...

  5. 一篇搞定RSA加密与SHA签名|与Java完全同步

    基础知识 什么是RSA?答:RSA是一种非对称加密算法,常用来对传输数据进行加密,配合上数字摘要算法,也可以进行文字签名. RSA加密中padding?答:padding即填充方式,由于RSA加密算法 ...

  6. Asp.Net Core 轻松学-一行代码搞定文件上传 JSONHelper

    Asp.Net Core 轻松学-一行代码搞定文件上传   前言     在 Web 应用程序开发过程中,总是无法避免涉及到文件上传,这次我们来聊一聊怎么去实现一个简单方便可复用文件上传功能:通过创建 ...

  7. 开源作品ThinkJDBC—一行代码搞定数据库操作

    1 简介 ThinkJD,又名ThinkJDBC,一个简洁而强大的开源JDBC操作库.你可以使用Java像ThinkPHP框架的M方法一样,一行代码搞定数据库操作.ThinkJD会自动管理数据库连接, ...

  8. 30行代码搞定WCF并发性能测试

    [以下只是个人观点,欢迎交流] 30行代码搞定WCF并发性能 轻量级测试. 1. 调用并发测试接口 static void Main()         {               List< ...

  9. 10行代码搞定移动web端自定义tap事件

    发发牢骚 移动web端里摸爬滚打这么久踩了不少坑,有一定移动web端经验的同学一定被click困扰过.我也不列外.一路走来被虐的不行,fastclick.touchend.iscroll什么的都用过, ...

随机推荐

  1. blktrace

    统计块设备层io信息. ● 安装 http://blog.csdn.net/hs794502825/article/details/8545133 出现问题,安装新立得软件包管理器:apt-get i ...

  2. Objective-C Runtime使用之全局字体替换为第三方字体(iOS)

    前言: iOS开发里头,常用的设置字体方式是使用UIFont的systemFontOfSize这个Class Method,在一半情况下都算够用. 最近有设计师朋友问能不能在客户端中使用特定的字体,答 ...

  3. Git和Github简单教程(转)

    这篇文章只挑一部分命令来讲,差不多够用就行的程度.如果需要其他命令,到时候再去其他地方了解就行了先在Github上写好再搬过来的:本文Github链接 目录: 零.Git是什么 一.Git的主要功能: ...

  4. 创建WordPress管理员账号

    如果你提供WordPress建站和维护服务,同时要维护很多客户的网站,就免不了要在客户的网站注册自己的管理员账号,每次都要操作是不是很麻烦呢?其实你可以添加下面的代码到客户所用的主题的 functio ...

  5. CSS定位的三种机制:普通流、绝对定位和浮动

    1.普通流: position : static – 元素框正常生成.即上述不对元素进行任何样式设置的默认形态. position : relative (此时设置top, right, bottom ...

  6. Sqlserver 循环表

    CREATE TABLE dbo.[User] ( UID BIGINT IDENTITY ,Name ) NOT NULL ,Pwd ) NOT NULL ,CONSTRAINT PK_User P ...

  7. Centos下ACL(访问控制列表)介绍(转)

    我们知道,在Linux操作系统中,传统的权限管理分是以三种身份(属主.属組以及其它人)搭配三种权限(可读.可写以及可执行),并且搭配三种特殊权限(SUID,SGID,SBIT),来实现对系统的安全保护 ...

  8. asio制作使用ssl通信的证书

    1,生成ca的keyopenssl genrsa -out ca.key 1024/2048 (with out password protected) openssl genrsa -des3 -o ...

  9. mysql 实战 or、in与union all 的查询效率

    OR.in和union all 查询效率到底哪个快. 网上很多的声音都是说union all 快于 or.in,因为or.in会导致全表扫描,他们给出了很多的实例. 但真的union all真的快于o ...

  10. 合并分区(merge range)对事务日志的影响

    分区维护作业执行失败,错误信息如下:数据库 'XXX' 的事务日志已满.若要查明无法重用日志中的空间的原因,请参阅 sys.databases 中的 log_reuse_wait_desc 列. [S ...