使用okHttp登录、Md5密码加密
使用okHttp3登录:
使用okHttp3之前要在build.gradle引入okHttp3的依赖(顺便引入解析数据的gson)
implementation 'com.squareup.okhttp3:okhttp:3.4.1' //okhttp3
implementation 'com.google.code.gson:gson:2.7' //导入gson
在AndroidManifest.xml中加入网络请求权限
<uses-permission android:name="android.permission.INTERNET" />
我在这里封装好了okHttp3的登录类:
package com.example.login; import android.util.Log;
import android.widget.Toast; import org.json.JSONException;
import org.json.JSONObject;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody; public class OkHttp {
private static MediaType mediaType; //登录
public static void Login(String url,String number,String password,okhttp3.Callback callback){
try {
OkHttpClient client = new OkHttpClient();
JSONObject jsonObject =new JSONObject();
jsonObject.put("number",number.toString());
jsonObject.put("password",password.toString());
mediaType = MediaType.parse("application/json;charset=utf-8");
RequestBody requestBody = RequestBody.create(mediaType,jsonObject.toString());
Request request = new Request.Builder().url(url).post(requestBody).build();
client.newCall(request).enqueue(callback);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
然后使用(在线程中使用):
String number = edt_number.getText().toString(); //获取文本框输入的账号
String password = edt_number.getText().toString(); //获取文本框输入的密码
String url = "http://XXX/login"; //获取url,这里加上自己的登录url
OkHttp.Login(url,number,password, new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("失败","错误");
} @Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.code() == 200){
Gson gson = new Gson();
String data = response.body().string();
final Emp emp = gson.fromJson(data,Emp.class); //新加了一个人员类
Log.d("成功","姓名:" + emp.getName());
runOnUiThread(new Runnable() {
@Override
public void run() {
btn_login.setText(emp.getName());
}
});
}else{
Log.d("成功","获取失败");
}
}
});
Md5密码加密(两种加密,看个人需求,普通Md5加密、自定义Md5加密):
Md5加密(代码):
public String md5Decode(String content) {
byte[] hash;
try {
hash = MessageDigest.getInstance("MD5").digest(content.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("NoSuchAlgorithmException", e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UnsupportedEncodingException", e);
}
//对生成的16字节数组进行补零操作
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
if ((b & 0xFF) < 0x10) {
hex.append("0");
}
hex.append(Integer.toHexString(b & 0xFF));
}
return hex.toString();
}
普通加密使用(直接在获取文本框密码中加密):
String password = md5Decode(edt_password.getText().toString()); //加密 //获取文本框输入的密码
自定义加密使用(在后面加了一段乱码,后台中的加密同时也要加上这段乱码):
String password = md5Decode(edt_password.getText().toString() +"dabsdafaqj23ou89ZXcj@#$@#$#@KJdjklj;D../dSF.,");
完整代码(MainActivity的代码):
package com.example.login; import androidx.appcompat.app.AppCompatActivity; import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast; import com.google.gson.Gson; import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException; import okhttp3.Call;
import okhttp3.Response; public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private EditText edt_number,edt_password;
private Button btn_login;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initView();
} private void initView(){
edt_number = (EditText)findViewById(R.id.edt_number);
edt_password = (EditText)findViewById(R.id.edt_password);
btn_login = (Button)findViewById(R.id.btn_login);
btn_login.setOnClickListener(this);
} @Override
public void onClick(View view) {
String number = edt_number.getText().toString(); //获取文本框中的账号
//获取文本框中的密码,MD5加密
String password = md5Decode(edt_password.getText().toString() +"dabsdafaqj23ou89ZXcj@#$@#$#@KJdjklj;D../dSF.,");
String url = ""; //登录的url
OkHttp.Login(url,number,password, new okhttp3.Callback() {
@Override
public void onFailure(Call call, IOException e) {
Log.d("失败","错误");
} @Override
public void onResponse(Call call, final Response response) throws IOException {
if(response.code() == 200){
Gson gson = new Gson();
String data = response.body().string();
final Emp emp = gson.fromJson(data,Emp.class);
Log.d("成功","姓名:" + emp.getName());
runOnUiThread(new Runnable() {
@Override
public void run() {
btn_login.setText(emp.getName());
}
});
}else{
Log.d("成功","获取失败");
}
}
});
} public String md5Decode(String content) {
byte[] hash;
try {
hash = MessageDigest.getInstance("MD5").digest(content.getBytes("UTF-8"));
} catch (NoSuchAlgorithmException e) {
throw new RuntimeException("NoSuchAlgorithmException", e);
} catch (UnsupportedEncodingException e) {
throw new RuntimeException("UnsupportedEncodingException", e);
}
//对生成的16字节数组进行补零操作
StringBuilder hex = new StringBuilder(hash.length * 2);
for (byte b : hash) {
if ((b & 0xFF) < 0x10) {
hex.append("0");
}
hex.append(Integer.toHexString(b & 0xFF));
}
return hex.toString();
} }
MainActivity的布局代码:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
android:paddingTop="10dp"
android:paddingRight="10dp"
android:paddingLeft="10dp"
tools:context=".MainActivity">
<EditText
android:id="@+id/edt_number"
android:gravity="center_horizontal|center_vertical"
android:lines="1"
android:maxLength="12"
android:layout_width="match_parent"
android:layout_height="40dp"
android:hint="请输入账号"
tools:ignore="MissingConstraints" />
<EditText
android:id="@+id/edt_password"
android:gravity="center_horizontal|center_vertical"
android:lines="1"
android:maxLength="12"
android:layout_width="match_parent"
android:layout_height="40dp"
android:hint="请输入密码"
android:inputType="textPassword"
tools:ignore="MissingConstraints" />
<Button
android:id="@+id/btn_login"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="登录"/> </LinearLayout>
OkHttp封装类代码:
package com.example.login; import android.util.Log;
import android.widget.Toast; import org.json.JSONException;
import org.json.JSONObject;
import okhttp3.MediaType;
import okhttp3.OkHttpClient;
import okhttp3.Request;
import okhttp3.RequestBody; public class OkHttp {
private static MediaType mediaType; //登录
public static void Login(String url,String number,String password,okhttp3.Callback callback){
try {
OkHttpClient client = new OkHttpClient();
JSONObject jsonObject =new JSONObject();
jsonObject.put("number",number.toString());
jsonObject.put("password",password.toString());
mediaType = MediaType.parse("application/json;charset=utf-8");
RequestBody requestBody = RequestBody.create(mediaType,jsonObject.toString());
Request request = new Request.Builder().url(url).post(requestBody).build();
client.newCall(request).enqueue(callback);
} catch (JSONException e) {
e.printStackTrace();
}
}
}
Emp人员类:
package com.example.login;
public class Emp {
private String number;
private String name;
public Emp(String number,String name){
this.number = number;
this.name = name;
}
public String getNumber() {
return number;
}
public void setNumber(String number) {
this.number = number;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
}
项目案例(点击获取,提取码:oi87),项目中有两个案例app的是页面传值,login是本章的登录
使用okHttp登录、Md5密码加密的更多相关文章
- Django -MD5密码加密与登录
直接贴代码 login_reg.py from django.shortcuts import render, redirect from web.forms.login_reg import Reg ...
- Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证
一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...
- Apach Shiro MD5密码加密过程(明文生成密码过程)详细解析
前言: 最近再项目当中使用的ApachShiro安全框架,对于权限和服务器资源的保护都有一个很好的管理.前期主要参考的文章有 项目中设计密码的加盐处理以及二次加密问题,跟着断点 一步步揭开Apach ...
- 015 Android md5密码加密及其工具类
1.md5加密介绍 MD5算法是广泛使用的杂凑函数,也就是哈希函数,英文全拼是:Message Digest Algorithm,对应的中文名字是消息摘要算法. MD5加密:将字符串转换成 32位的字 ...
- spring mvc自定义注解--登录时密码加密注解
1,定义注解名称接口 /** * 使用该注解不用再MD5转换了 * * @author adonis * */ @Target(ElementType.PARAMETER) @Retention(Re ...
- MD5密码加密
using System; using System.Security.Cryptography; using System.Text; namespace DimoNetwork.Common.DE ...
- 添加MD5 密码加密
编辑 /etc/grub/grub.conf 配置文件 password = 123456 password --md5 $5$H.........SS grub-crypt --md5 ...
- web登录密码加密
文章:如何实现登录页面密码加密 文章:用RSA加密实现Web登录密码加密传输 文章:web登录用户名密码加密 知乎文章:Web前端密码加密是否有意义? 文章:记录一次黑客模拟攻击 成功拿到淘宝账号和密 ...
- Spring-Security (学习记录五)--配置登录时,密码采用md5加密,以及获取登录信息属性监听同步自己想要的登录信息
目录 1. PasswordEncoder 采用密码加密 2. 获取当前的用户信息 1. PasswordEncoder 采用密码加密 使用前面的例子.可以看出我们数据库密码是采用明文的,我们在登录的 ...
随机推荐
- [leetcode] 542. 01 Matrix (Medium)
给予一个矩阵,矩阵有1有0,计算每一个1到0需要走几步,只能走上下左右. 解法一: 利用dp,从左上角遍历一遍,再从右下角遍历一遍,dp存储当前位置到0的最短距离. 十分粗心的搞错了col和row,改 ...
- cesium 学习(五) 加载场景模型
cesium 学习(五) 加载场景模型 一.前言 现在开始实际的看看效果,目前我所接触到基本上都是使用Cesium加载模型这个内容,以及在模型上进行操作.So,现在进行一些加载模型的学习,数据的话可以 ...
- 学习16内容# 1.自定义模块 # 2.time # 3.datetime # 4.random
模块的定义与分类 模块是什么? 这几天,我们进入模块的学习.在学习模块之前,我们首先要知道,什么是模块? 一个函数封装一个功能,你使用的软件可能就是由n多个函数组成的(先不考虑面向对象).比如 ...
- 单页面(如react,vue)网站的服务器渲染 SSR 之 SEO 大杀器 Rendertron
单页面网站,比如vue.recat框架的网站,一般都是直接从服务器推送index.html,再根据自身路由通过js在客户端浏览器渲染出完整的html页面. 但是搜索引擎的爬虫可没有这么智能(实际上go ...
- PHP与ECMAScript_1_变量与常量
PHP ECMAScript 变量命名规则 (相同点) 变量包含:字母.数字.下划线字符 变量只能以字母或下划线开头 变量不能以数字开头 变量名是区分大小写 变量包含:字母.数字.下划线字符 变量只能 ...
- 初识web
人得往前走啊 所以学学web 动态网页是指在服务器端运行的,使用程序语言设计的交互式网页,它们会根据某种条件的变化,返回不同的网页内容.可以让用户和服务器交互的网站.然而动态网站并不是指具有动画功能的 ...
- [原创]一款基于Reactor线程模型的java网络爬虫框架
AJSprider 概述 AJSprider是笔者基于Reactor线程模式+Jsoup+HttpClient封装的一款轻量级java多线程网络爬虫框架,简单上手,小白也能玩爬虫, 使用本框架,只需要 ...
- python输出九九乘法表
1.脚本如下 (1)倒三角格式的,注意行前的空格 for i in range(1,10): for j in range(i,10): print("%d*%d= ...
- 自定义SWT控件四之其它下拉框
4.其它下拉框 4.1 添加联动二级多选择框(有添加按钮和删除按钮) package com.view.control.select; import java.util.ArrayList; impo ...
- 【故障公告】发布 .NET Core 版博客站点引起大量 500 错误
非常抱歉,今天上午的博客站点故障给大家带来了很大的麻烦,请大家谅解.这次故障是我们发布 .NET Core 版博客站点引起的,虽然我们进行了充分的准备,但还是低估了高并发下的复杂问题. 以下是故障背景 ...