1、使用okHttp3登录

2、Md5密码加密

3、完整代码

4、项目案例

使用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密码加密的更多相关文章

  1. Django -MD5密码加密与登录

    直接贴代码 login_reg.py from django.shortcuts import render, redirect from web.forms.login_reg import Reg ...

  2. Shiro自定义realm实现密码验证及登录、密码加密注册、修改密码的验证

    一:先从登录开始,直接看代码 @RequestMapping(value="dologin",method = {RequestMethod.GET, RequestMethod. ...

  3. Apach Shiro MD5密码加密过程(明文生成密码过程)详细解析

    前言: 最近再项目当中使用的ApachShiro安全框架,对于权限和服务器资源的保护都有一个很好的管理.前期主要参考的文章有 项目中设计密码的加盐处理以及二次加密问题,跟着断点 一步步揭开Apach ...

  4. 015 Android md5密码加密及其工具类

    1.md5加密介绍 MD5算法是广泛使用的杂凑函数,也就是哈希函数,英文全拼是:Message Digest Algorithm,对应的中文名字是消息摘要算法. MD5加密:将字符串转换成 32位的字 ...

  5. spring mvc自定义注解--登录时密码加密注解

    1,定义注解名称接口 /** * 使用该注解不用再MD5转换了 * * @author adonis * */ @Target(ElementType.PARAMETER) @Retention(Re ...

  6. MD5密码加密

    using System; using System.Security.Cryptography; using System.Text; namespace DimoNetwork.Common.DE ...

  7. 添加MD5 密码加密

        编辑 /etc/grub/grub.conf 配置文件 password = 123456 password --md5 $5$H.........SS grub-crypt  --md5   ...

  8. web登录密码加密

    文章:如何实现登录页面密码加密 文章:用RSA加密实现Web登录密码加密传输 文章:web登录用户名密码加密 知乎文章:Web前端密码加密是否有意义? 文章:记录一次黑客模拟攻击 成功拿到淘宝账号和密 ...

  9. Spring-Security (学习记录五)--配置登录时,密码采用md5加密,以及获取登录信息属性监听同步自己想要的登录信息

    目录 1. PasswordEncoder 采用密码加密 2. 获取当前的用户信息 1. PasswordEncoder 采用密码加密 使用前面的例子.可以看出我们数据库密码是采用明文的,我们在登录的 ...

随机推荐

  1. vscode如何将less编译到指定css目录中

    首先使用vscode的搬砖猿,想要在vscode编辑器里面很方便的编译less文件,需要在扩展商店里面下载一款名叫Esay LESS的超好用扩展(我自己都不信),哈哈,其实还好. 安装完扩展之后,最好 ...

  2. mount命令中offset参数的意义

    mount命令中offset参数的意义        感觉好久没有来写东西了,最近一直忙个不停,今天也一样,总感觉时间不够用,唉,这里来临时总结一下工作中的一点小收获吧.今天要说的是我们常用的解压IM ...

  3. Python基础总结之第三天开始重新认识‘字符串’(新手可相互督促)

    年薪20万的梦想,又进了一步... 戏好多 ’字符串‘开始啦~ 字符串的定义:字符串可以用英文单引号或双引号又或者三引号包围起来. 为毛有单引号,还要有双引号和三引号??? 看案例吧: 字符串的其他使 ...

  4. idea新建javaweb工程

    最近尝试了idea的使用,将idea建立javaweb工程的步骤记录下来 1.方框里边是重点 2.next后输入工程文件名点击finish 3.如图看到项目文件夹里边没有WEB-INF文件夹及里边的w ...

  5. 从零开发一款自己的小程序UI组件库(一)

    写在前面:有开发过小程序的朋友肯定知道组件化开发的特性,高内聚与低耦合.使用已有的UI组件库,诸如:vantUI-weapp.minUI-weapp等UI组件库的诞生使我们的开发速度大大的加快,丰富的 ...

  6. Linux 下实践 VxLAN:虚拟机和 Docker 场景

    本文首发于我的公众号 Linux云计算网络(id: cloud_dev),专注于干货分享,号内有 10T 书籍和视频资源,后台回复 「1024」 即可领取,欢迎大家关注,二维码文末可以扫. 在上篇文章 ...

  7. 渐进式web应用开发-- 使用后台同步保证离线功能(六)

    _ 阅读目录 一:什么是后台同步保证离线功能呢? 二:后台同步是如何实现的呢? 三:如何给sync事件传递数据? 四:在我们的项目中添加后台同步功能 回到顶部 一:什么是后台同步保证离线功能呢? 在我 ...

  8. About dycf

    SYSU  数媒在读 所有资料可能与课程相关可能与参与项目相关 欢迎交流 . . . 中之人: ↓↓↓ ↑↑↑   是他  就是他  ↑↑↑

  9. .NET读写DBF

    C# 读写DBF分为两种模式,一种为OLEDB驱动,需要安装一个文件“VFPOLEDBSetup.msi”: 一种为Odbc模式,这种几乎上不需要安装Odbc驱动 我这边用的是第一种. /// < ...

  10. Linux Qt使用POSIX多线程条件变量、互斥锁(量)

    今天团建,但是文章也要写.酒要喝好,文要写美,方为我辈程序员的全才之路.嘎嘎 之前一直在看POSIX的多线程编程,上个周末结合自己的理解,写了一个基于Qt的用条件变量同步线程的例子.故此来和大家一起分 ...