base64md5dict

本文介绍了一个使用Base64与MD5双重加密的方法,通过将输入字符串先进行Base64编码再进行MD5加密,并混合两种加密结果来增强安全性。文中提供了一个Java实现的例子,展示了如何从文件中读取密码列表并生成新的加密密码。

1、base64md5dict

import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.FileReader;
import java.io.FileWriter;
import java.io.IOException;
import java.security.MessageDigest;
import java.util.ArrayList;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;

public class base64md5dict {
	private static String fun(String password){
		String base64Encode=encode64(password);//base64编码
		String md5Encode=md5Encode(password);//md5编码
		int count =base64Encode.length()/4;
		String encryptPassword="";
		for(int i=0;i<4;i++){	
			encryptPassword=encryptPassword+md5Encode.substring(i*8, i*8+8);
			encryptPassword=encryptPassword+base64Encode.substring(i*count, i*count+count);
		}
		return encryptPassword;
	}
	private static String encode64(String str){//base64编码
	    byte[] b = null;
	    String s = null;
	    try{
	        b = str.getBytes("utf-8");
	    }catch (Exception e){
	        e.printStackTrace();
	    }
	    if (b != null){
	        s = new BASE64Encoder().encode(b);
	    }
	    return s;
	}
	private static String md5Encode(String text){//md5编码
        try{
            MessageDigest md = MessageDigest.getInstance("MD5");
            md.update(text.getBytes());
            byte b[] = md.digest();
            int i;
            StringBuffer buf = new StringBuffer("");
            for (int offset = 0; offset < b.length; offset++){
                i = b[offset];
                if (i < 0){
                    i += 256;
                }
                if (i < 16){
                    buf.append("0");
                }
                buf.append(Integer.toHexString(i));
            }
            return buf.toString();                      // 32位加密
            //return buf.toString().substring(8, 24);   // 16位加密
        }catch (Exception e){
            e.printStackTrace();
            return null;
        }
    }
	public static void main(String[] args) throws IOException {
		
		ArrayList<String> list = new ArrayList<>();
		BufferedReader br = new BufferedReader(new FileReader("D:\\dict\\old.txt"));
		BufferedWriter bw = new BufferedWriter(new FileWriter("D:\\dict\\newbase64md5.txt"));
		
		String line;
		while((line=br.readLine())!=null){
			list.add(line);
		}
		br.close();
		for(int i=0;i<list.size();i++){
		  System.out.println(list.get(i));
		}
				
		for(int i=0;i<list.size();i++){
			bw.write(fun(list.get(i)));
			bw.write("\r\n");
		}
		bw.close();
	}
}

 

转载于:https://www.cnblogs.com/wmiot/p/11234270.html

1、图像统一用base64编码。2、不需要reset_daily_status,这个不需要前端参与是后端会每日自动进行的&mdash;&mdash;根据这两点再修改前端的db_module:import requests import json import base64 from typing import Dict, List, Optional class EmployeeService: def __init__(self, base_url="http://127.0.0.1:5000"): """ 初始化员工服务 :param base_url: 后端API基础URL """ self.base_url = base_url self._last_employee_str = "" # 存储最后查询的员工信息字符串 self._last_employee_data = None # 存储最后查询的员工原始数据 def _request(self, endpoint, method="GET", payload=None, files=None): """ 通用HTTP请求方法 :return: 响应字典或二进制数据 """ url = f"{self.base_url}{endpoint}" headers = {'Content-Type': 'application/json'} try: if method == "GET": response = requests.get(url, params=payload, headers=headers) elif method == "POST": response = requests.post(url, json=payload, files=files, headers=headers) elif method == "DELETE": response = requests.delete(url, json=payload, headers=headers) else: return {"code": 400, "msg": f"不支持的HTTP方法: {method}", "data": None} # 处理二进制图像响应 if 'image' in endpoint: if response.status_code == 200: return response.content return None response.raise_for_status() return response.json() except requests.exceptions.HTTPError as e: error_msg = f"HTTP错误 ({e.response.status_code}): {e.response.text}" return {"code": e.response.status_code, "msg": error_msg, "data": None} except Exception as e: return {"code": 500, "msg": f"请求异常: {str(e)}", "data": None} # ------------------ 员工管理接口 ------------------ def add_employee(self, emp_id: str, name: str, image_base64: str = None) -> Dict: """ 添加新员工 :param emp_id: 8位数字工号 :param name: 员工姓名 :param image_base64: Base64编码图像 :return: 操作结果字典 """ payload = {"emp_id": emp_id, "name": name} if image_base64: payload["image"] = image_base64 return self._request("/employee/add", "POST", payload=payload) def delete_employee(self, emp_id: str) -> Dict: """ 删除员工 :param emp_id: 员工工号 :return: 操作结果字典 """ return self._request(f"/employee/delete/{emp_id}", "DELETE") def update_employee(self, emp_id: str, name: str = None, status: int = None, image_base64: str = None) -> Dict: """ 更新员工信息 :param emp_id: 员工工号 :param name: 新姓名 :param status: 打卡状态 (0/1) :param image_base64: Base64编码图像 :return: 操作结果字典 """ payload = {"emp_id": emp_id} if name: payload["name"] = name if status is not None: payload["status"] = status if image_base64: payload["image"] = image_base64 return self._request("/employee/update", "POST", payload=payload) # ------------------ 查询接口 ------------------ def get_employee(self, emp_id: str) -> Optional[Dict]: """ 获取员工详细信息 :param emp_id: 员工工号 :return: 员工信息字典或None """ response = self._request(f"/employee/{emp_id}", "GET") if response and response.get("code") == 200: # 存储原始数据和字符串表示 self._last_employee_data = response["data"] self._last_employee_str = json.dumps(response["data"], ensure_ascii=False) return response["data"] return None def get_all_employees(self) -> List[Dict]: """ 获取所有员工列表 :return: 员工信息字典列表 """ response = self._request("/employee/list", "GET") return response.get("data", []) if response and response.get("code") == 200 else [] # ------------------ 图像处理 ------------------ def get_employee_image(self, emp_id: str) -> Optional[bytes]: """ 获取员工头像原始二进制数据 :param emp_id: 员工工号 :return: 图像二进制数据或None """ return self._request(f"/employee/image/{emp_id}", "GET") def get_employee_image_base64(self, emp_id: str) -> Optional[str]: """ 获取员工头像的base64编码 :param emp_id: 员工工号 :return: base64编码字符串或None """ image_data = self.get_employee_image(emp_id) return base64.b64encode(image_data).decode('utf-8') if image_data else None # ------------------ 打卡管理 ------------------ def clock_in(self, emp_id: str) -> Dict: """ 员工打卡 :param emp_id: 员工工号 :return: 操作结果字典 """ return self._request("/employee/clock_in", "POST", payload={"emp_id": emp_id}) # ------------------ 实用功能 ------------------ def reset_daily_status(self) -> Dict: """ 重置所有员工打卡状态 :return: 操作结果字典 """ return self._request("/reset_daily_status", "POST") @property def last_employee_str(self) -> str: """ 获取最后查询的员工信息字符串 :return: JSON格式的员工信息字符串 """ return self._last_employee_str @property def last_employee_data(self) -> Optional[Dict]: """ 获取最后查询的员工原始数据 :return: 员工信息字典或None """ return self._last_employee_data def get_employee_status(self, emp_id: str) -> Optional[int]: """ 获取员工打卡状态 :param emp_id: 员工工号 :return: 状态值 (0/1) 或None """ employee = self.get_employee(emp_id) return employee.get("status") if employee else None def get_record_count(self, emp_id: str) -> Optional[int]: """ 获取员工打卡次数 :param emp_id: 员工工号 :return: 打卡次数或None """ employee = self.get_employee(emp_id) return employee.get("record_count") if employee else None # 单例模式 - 全局员工服务实例 emp_service = EmployeeService() &mdash;&mdash;并告诉我怎么加入图像进行测试
最新发布
08-22
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值