文章目录
- 前言
- 一、短信验证码的基本步骤
- 二、阿里云短信验证
- 三、导入依赖坐标
- 四、调用API
- 五、随机生成验证码工具类
- 六、发送请求调用
前言
背景:目前在很多项目中都出现使用短信验证码来实现注册、登录、购买、支付、转账等功能,发短信功能几乎已经成为项目中不可或缺的技术之一。
一、短信验证码的基本步骤
- 选择一个合适的编程语言,例如Python、Java或PHP等。
- 寻找能够发送短信的API,例如Twilio、阿里云短信等。
- 注册并获取API的账号和认证信息(如API密钥或令牌)。
- 根据API文档中所述,构建发送短信验证码的请求。通常需要设置接收者手机的手机号码和短信内容等参数。
- 调用API发送请求,并解析API返回的响应结果,以检查短信是否发送成功。
写代码时需要特别注意短信验证码的安全性,例如防止短信轰炸、重复发送或被恶意利用等问题。
二、阿里云短信验证
1. 注册阿里云账号
2.点击右上角的控制台后,搜索短信服务
3. 申请签名
添加签名 :
4.申请模板
短信模板包含短信发送内容、场景、变量信息
添加模板:
申请后的模板详情:
申请签名和申请模板都需要人工审核的,一般1到2个工作日,其实还是挺快的。
5.设置AccessKey
相当于用户名的密码(自己记住和使用)
将鼠标移到右上角的头像,就会弹出以下对话框:
妥善保管好自己的AccessKey的密码,一旦泄漏出去,别人使用你的短信验证,耗费自己的费用。
创建自己的用户
勾选openApI调用,相当于使用编程访问
创建好后,显示AccessKeyID和AccessKey Secrect,将密码保存到自己找的到的地方,方便后续使用。
官方提示 :若开通 OpenAPI 调用访问,请及时保存 AccessKey 信息,页面关闭后将无法再次获取信息。
设置权限 :
点击新增授权
这两个权限是如果你的AccessKey泄漏出去了,别人也只能调用你短信验证的功能,不能使用其他的功能。
如果你不使用了,或者泄漏出去了,你也可以把AccessKey禁用或者删除。
三、导入依赖坐标
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-core</artifactId>
<version>4.6.3</version>
</dependency>
<dependency>
<groupId>com.aliyun</groupId>
<artifactId>aliyun-java-sdk-dysmsapi</artifactId>
<version>2.2.1</version>
</dependency>
四、调用API
可以在文档帮助中心找相应语言的SDK,可以将代码改造一下,通过Api就可以调用短信验证服务了。
/**
* 短信发送工具类
*/
public class SMSUtils {
/**
* 发送短信
* @param signName 签名
* @param templateCode 模板
* @param phoneNumbers 手机号
* @param param 参数
*/
public static void sendMessage(String signName, String templateCode,String phoneNumbers,String param){
DefaultProfile profile = DefaultProfile.getProfile("cn-hangzhou", "", "");
//getProfile(地域编码,AccessKeyId,AccessKeySecret)
IAcsClient client = new DefaultAcsClient(profile);
SendSmsRequest request = new SendSmsRequest();
request.setSysRegionId("cn-hangzhou");//设置地域编码
request.setPhoneNumbers(phoneNumbers);
request.setSignName(signName);
request.setTemplateCode(templateCode);
request.setTemplateParam("{\"code\":\""+param+"\"}");
try {
SendSmsResponse response = client.getAcsResponse(request);
System.out.println("短信发送成功");
}catch (ClientException e) {
e.printStackTrace();
}
}
}
五、随机生成验证码工具类
/**
* 随机生成验证码工具类
*/
public class ValidateCodeUtils {
/**
* 随机生成验证码
* @param length 长度为4位或者6位
* @return
*/
public static Integer generateValidateCode(int length){
Integer code =null;
if(length == 4){
code = new Random().nextInt(9999);//生成随机数,最大为9999
if(code < 1000){
code = code + 1000;//保证随机数为4位数字
}
}else if(length == 6){
code = new Random().nextInt(999999);//生成随机数,最大为999999
if(code < 100000){
code = code + 100000;//保证随机数为6位数字
}
}else{
throw new RuntimeException("只能生成4位或6位数字验证码");
}
return code;
}
/**
* 随机生成指定长度字符串验证码
* @param length 长度
* @return
*/
public static String generateValidateCode4String(int length){
Random rdm = new Random();
String hash1 = Integer.toHexString(rdm.nextInt());
String capstr = hash1.substring(0, length);
return capstr;
}
}
六、发送请求调用
@PostMapping("/sendMsg")
public R<String> sendMsg(@RequestBody User user, HttpSession session){
//获取手机号
String phone = user.getPhone();
if (StringUtils.isNotEmpty(phone)){
//生成随机的4位验证码
String code = ValidateCodeUtils.generateValidateCode(4).toString();
log.info("code={}",code);
//调用阿里云提供的短信服务api完成发送短信
// SMSUtils.sendMessage("模板签名","模板id",phone,code);
//需要将生成的验证码保存到Session
session.setAttribute(phone,code);
return R.success("手机短信验证码发送成功");
}
return R.error("短信发送失败");
}
最后
从时代发展的角度看,网络安全的知识是学不完的,而且以后要学的会更多,同学们要摆正心态,既然选择入门网络安全,就不能仅仅只是入门程度而已,能力越强机会才越多。
因为入门学习阶段知识点比较杂,所以我讲得比较笼统,大家如果有不懂的地方可以找我咨询,我保证知无不言言无不尽,需要相关资料也可以找我要,我的网盘里一大堆资料都在吃灰呢。
干货主要有:
①1000+CTF历届题库(主流和经典的应该都有了)
②CTF技术文档(最全中文版)
③项目源码(四五十个有趣且经典的练手项目及源码)
④ CTF大赛、web安全、渗透测试方面的视频(适合小白学习)
⑤ 网络安全学习路线图(告别不入流的学习)
⑥ CTF/渗透测试工具镜像文件大全
⑦ 2023密码学/隐身术/PWN技术手册大全
如果你对网络安全入门感兴趣,那么你需要的话可以点击这里👉网络安全重磅福利:入门&进阶全套282G学习资源包免费分享!
扫码领取