package com.csy.cn;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Random;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.commons.codec.digest.DigestUtils;
import org.json.JSONException;
import org.json.JSONObject;
import org.junit.Test;
@WebServlet("/getCode")
public class Sendcode extends HttpServlet{
private static final String QUERY_URL="https://api.miaodiyun.com/20150822/industrySMS/sendSMS";
private static final String ACCOUNT_SID="d8ad4b0a021e4747ac227d3642efaeeb";
private static final String AUTH_TOKEN="7632bbb90a9744f28cee049ea23476f6";
public static final String RESP_DATA_TYPE = "json";
public void doPost(HttpServletRequest request,HttpServletResponse response) throws ServletException {
try {
request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
String phone=request.getParameter("phone");
//发送验证码给前台
String code=sendcode(phone);
try {
response.getWriter().print(code);
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//获取验证码
public static String sendcode(String phone) {
String code=getRandomCode();//随机码
String smsContent="【谭州JAVA学院】"+"您的验证码为"+code+",请于分钟内正确输入,如非本人操作,请忽略此短信。";
String tmpSmsContent = null;
try{
tmpSmsContent = URLEncoder.encode(smsContent, "UTF-8");
}catch(Exception e){
}
String url = QUERY_URL;
String body = "accountSid=" + ACCOUNT_SID + "&to=" + phone + "&smsContent=" + tmpSmsContent
+ createCommonParam();
// 提交请求
String result = post(url, body);
// System.out.println("result:" + System.lineSeparator() + result+"pppp");
JSONObject object;
try {
object = new JSONObject(result);
String responeCode=object.getString("respCode");
System.out.println("responeCode////"+responeCode);
if (responeCode.equals("00000")) {
return code;
}else {
return "nonono";
}
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return code;
}
//获取随机数
public static String getRandomCode(){
String ranNum=new Random().nextInt(1000000)+"";
if (ranNum.length()!=6) {
getRandomCode();
}
return ranNum;
}
//获取时间
public static String createCommonParam()
{
// 时间戳
SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmss");
String timestamp = sdf.format(new Date());
// 签名
String sig = DigestUtils.md5Hex(ACCOUNT_SID + AUTH_TOKEN + timestamp);//加密
return "×tamp=" + timestamp + "&sig=" + sig + "&respDataType=" + RESP_DATA_TYPE;
}
/**
* post请求
*
* @param url
* 功能和操作
* @param body
* 要post的数据
* @return
* @throws IOException
*/
public static String post(String url, String body)
{
//System.out.println("url:" + System.lineSeparator() + url);
//System.out.println("body:" + System.lineSeparator() + body);
String result = "";
try
{
OutputStreamWriter out = null;
BufferedReader in = null;
URL realUrl = new URL(url);
URLConnection conn = realUrl.openConnection();
// 设置连接参数
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setConnectTimeout(5000);
conn.setReadTimeout(20000);
conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
// 提交数据
out = new OutputStreamWriter(conn.getOutputStream(), "UTF-8");
out.write(body);
out.flush();
// 读取返回数据
in = new BufferedReader(new InputStreamReader(conn.getInputStream(), "UTF-8"));
String line = "";
boolean firstLine = true; // 读第一行不加换行符
while ((line = in.readLine()) != null)
{
if (firstLine){
firstLine = false;
} else{
result += System.lineSeparator();
}
result += line;
}
} catch (Exception e)
{
e.printStackTrace();
}
return result;
}
@Test
public void sendcode(){
System.out.println(sendcode("13609532983"));
}
}
获取手机短信验证码源码
5星 · 超过95%的资源 需积分: 0 70 浏览量
更新于2023-03-12
1
收藏 581KB ZIP 举报
在IT行业中,手机短信验证码是一种常见的身份验证机制,广泛应用于注册、登录、支付等场景,以确保用户操作的安全性。本文将围绕“获取手机短信验证码源码”这一主题,深入探讨其背后的实现原理、关键技术和相关知识点。
我们要了解手机短信验证码的基本流程。通常,当用户在应用或网站上进行敏感操作时,系统会向用户注册的手机号发送一个随机生成的四位或六位数字验证码。用户在规定时间内输入这个验证码,系统验证正确后才会执行相应操作。这个过程涉及以下几个关键步骤:
1. **验证码生成**:系统通过随机数生成器创建一个唯一的验证码,并将其与用户的手机号关联,通常存储在服务器的会话(session)或数据库中。
2. **短信发送**:生成的验证码通过短信网关发送到指定的手机号。这通常需要集成第三方短信服务商的API,如阿里云、腾讯云等,提供接口调用。
3. **用户输入**:用户收到短信后,在应用或网页上输入验证码。
4. **验证码验证**:系统接收到用户输入的验证码后,与服务器保存的验证码进行对比,确认一致则验证成功。
5. **安全措施**:为了防止恶意攻击,系统通常会设置验证码的有效期和发送频率限制。
现在我们来探讨获取手机短信验证码源码的相关知识点:
- **编程语言**:常见的实现语言有Java、Python、PHP、JavaScript等。不同语言的实现方式会有差异,但基本逻辑是相同的。
- **随机数生成**:使用内置的随机数库,例如Java的`java.util.Random`,Python的`random`模块,确保生成的验证码具有足够的随机性和不可预测性。
- **HTTP请求**:发送短信通常涉及HTTP请求,可以使用HTTP客户端库,如Java的`HttpURLConnection`,Python的`requests`库,发送POST请求到短信服务商的API。
- **JSON处理**:API交互通常采用JSON格式的数据交换,需要对JSON的解析和构建有了解,例如Java的`org.json`库,Python的`json`模块。
- **会话管理**:在服务器端保存验证码,可以使用会话(session)技术,如Java的Servlet API中的`HttpSession`,PHP的`$_SESSION`全局变量。
- **错误处理**:考虑到网络延迟、短信服务商的错误等情况,需要编写异常处理代码,保证程序的健壮性。
- **安全性**:确保源码中不泄露敏感信息,如API密钥,以及防止SQL注入、XSS攻击等。
获取手机短信验证码源码涉及到多个编程和技术层面的知识,包括验证码生成、HTTP通信、数据交换格式、服务器会话管理以及安全实践。理解并掌握这些知识点,对于开发出安全可靠的验证码系统至关重要。在实际项目中,还需要根据业务需求和特定环境进行调整和优化。
面试题库test
- 粉丝: 551
- 资源: 214
最新资源
- 先秦文学试题库参考答案与解析.doc
- 西南大学《心理健康教育》作业和答案.doc
- 镶嵌式电力调度模拟屏通用技术条件.doc
- 小学数学综合实践活动《营养午餐》教学案例[陈倩影].doc
- 宜宾市义教小学数学学科教学指导意见(李冰).doc
- 义务教育学校校长专业标准.doc
- 一年级(下册)语文第八单元单元分析和教(学)案.doc
- 珍惜资源,保护环境作文.doc
- 园艺植物研究--紫罗兰的切花保鲜.doc
- 中小学教师招考教综知识点整理.doc
- 中考语文试题分类解析-选词填空.doc
- 中小学综合实践活动教学案.doc
- 中医推拿关节整复手法学习.doc
- 中学生心理健康教育的方法和途径.doc
- 桩基技术人员培训考试题.doc
- 注册安全工程师安全生产法及相关法律法规考前知识点总结.doc