开源密码管理软件项目说明(附源代码)

一、简介

软件名称:开源密码管理软件
开发语言:Java
MIDP版本:1.0
开发环境:CodeWarrior+J2ME WTK1.03
测试环境:J2ME WTK1.04+中文补充包

简介:
    随着社会的发展和进步,每个人需要记忆的密码信息很多,如银行卡密码、邮箱密码、论坛密码等等,记忆这些种类繁多的密码,给人们带来了很大的不便。
    本软件实现在用户手机中,存储和管理用户的各类密码信息。主要功能:
 1、增加密码。存储新的密码,在新的密码中,用户可以存储密码ID,即密码用途,密码和备注信息等。
 2、查看密码。查看、修改和删除已有的密码休息。
 3、设置密码。可以为该软件设置进入密码。即在手机中使用该软件时,用户需要输入该密码方可进入。已提供删除该密码功能。

如果您有什么好的建议,请与我联系,cqucyf@263.net

二、使用J2ME WTK编译和运行该源代码
1、在Ktoolbar中新建一个项目:
   项目名称:任意(例如pm)
   MIDlet类名:pm.core.PasswordManagerMidlet
2、将该源代码拷贝到您的J2ME WTK安装目录下的apps中,
   路径为:项目名称\src\\pm\core\目录下
   例如您的J2ME WTK安装在C:\J2mewtk目录,项目名称为pm,则完整路径为:
   C:\J2mewtk\apps\pm\src\pm\core
3、使用KToolbar编译和运行该项目。

备注:如果需要在模拟器中显示中文名称,可以在打开该项目的情况下,在KToolBar的setting(设置)\MIDlets下修改name为“开源密码管理软件”即可。

三、源代码
/**
 * 版权所有,2004-
 * 作者:陈跃峰
 * email:cqucyf@263.net
 * 该代码,您可以任意使用,转贴,但是请在任何时候都不要删除该信息
 * 若以商业方式使用,请于作者联系
 * 版本号:0.90
 * 完成时间:2004-7-07
 * 修改时间:2004-8-17
 */
package pm.core;

import java.io.*;
import javax.microedition.midlet.*;
import javax.microedition.lcdui.*;
import javax.microedition.io.*;
import javax.microedition.rms.*;


/**
 * 密码管理软件
 * 实现将常用的密码信息都保存在手机中。如银行密码、邮箱密码等等,该软件不访问网络,所以绝对不会泄漏您的个人隐私。
 */
public class PasswordManagerMidlet extends MIDlet implements CommandListener {
 //显示对象
    Display display;
    //主题
    String title = "开源密码管理软件";
    //软件主界面
    List lstMain;
   
    //主界面确定按钮
    Command cmdEnterMain;
    //退出按钮
    Command cmdExit;
   
    //增加密码界面
    Form frmAddPassword;
    //密码ID
    TextField tfId;
    //密码
    TextField tfPsswordAdd;
    //确认密码
    TextField tfConfirmPasswordAdd;
    //备注信息
    TextField tfRemark;
    //确定按钮
    Command cmdEnterAdd;
    //返回按钮
    Command cmdBackAdd;
   
    //查看密码主界面
    List lstView;
    //查看详细信息按钮
    Command cmdInfo;
    //返回按钮
    Command cmdBackViewMain;
     //查看密码中的显示详细信息窗口
     TextBox tbViewInfo;
     //删除按钮
     Command cmdDelView;
     //修改按钮
     Command cmdModify;
     //返回按钮
     Command cmdBackViewInfo;
     
     //查看密码中的修改密码窗口
     Form frmViewModifyPassword;
     //密码文本框
     TextField tfPasswordView;
     //确认密码文本框
     TextField tfConfirmPasswordView;
     //修改按钮
     Command cmdModifyView;
     //返回按钮
     Command cmdBackViewModify;
   
   
    //设置密码界面
    Form frmSetPassword;
    //密码
    TextField tfPassword;
    //确认密码
    TextField tfConfirmPassword;
    //确定按钮
    Command cmdEnterSetPassword;
    //返回按钮
    Command cmdBackSetPassword;
    //删除按钮
    Command cmdDelSetPassword;
   
    //帮助界面
    Form frmHelp;
    //帮助界面的返回按钮
    Command cmdBackHelp;
   
    //关于界面
    Form frmAbout;
    //关于界面的返回按钮
    Command cmdBackAbout;
   
    //提示窗口
    Alert alert;
   
    //启动时的输入密码界面
    Form frmStartPassword;
    //密码输入文本框
    TextField tfStartPassword;
    //密码界面中的确定按钮
    Command cmdEnterStart;
   
    //密码
    String password = "";
    //记录对象
    RecordStore rs;
    //存储密码ID内容
    String[] id;
    //保存显示的密码ID对应的索引号,数组下标为0的代表第一个密码ID,1的代表第二个,依次类推
    int[] idIndex;
 /**
  * 初始化界面元素
  */
    public PasswordManagerMidlet() {
      //初始化显示对象
        display = Display.getDisplay(this);
        //初始化主窗体
  lstMain = new List(title,List.IMPLICIT);
  lstMain.append("增加",null);
  lstMain.append("察看",null);
  lstMain.append("设置",null);
  lstMain.append("帮助",null);
  lstMain.append("关于",null);
  
  //初始化主界面确定按钮
  cmdEnterMain = new Command("确定",Command.OK,1);
  //添加到主界面
  lstMain.addCommand(cmdEnterMain);
  
  //初始化退出按钮
  cmdExit = new Command("退出",Command.EXIT,1);
  //添加到主界面
  lstMain.addCommand(cmdExit);
  
  //初始化增加密码界面
  frmAddPassword = new Form(title);
  tfId = new TextField("密码ID:","",100,TextField.ANY);
  tfPsswordAdd = new TextField("密码:","",20,TextField.PASSWORD);
  tfConfirmPasswordAdd = new TextField("1确认密码:","",20,TextField.PASSWORD);
  tfRemark = new TextField("备注:","",100,TextField.ANY);
  cmdEnterAdd = new Command("确定",Command.OK,1);
  cmdBackAdd = new Command("返回",Command.BACK,1);
  
  //添加到增加密码界面
  frmAddPassword.append(tfId);
  frmAddPassword.append(tfPsswordAdd);
  frmAddPassword.append(tfConfirmPasswordAdd);
  frmAddPassword.append(tfRemark);
  frmAddPassword.addCommand(cmdEnterAdd);
  frmAddPassword.addCommand(cmdBackAdd);
  
  //初始化查看密码主界面
  lstView = new List(title,List.IMPLICIT);
  cmdInfo = new Command("查看",Command.SCREEN,1);
  cmdBackViewMain = new Command("返回",Command.BACK,1);
  //添加到查看密码主界面
  lstView.addCommand(cmdInfo);
  lstView.addCommand(cmdBackViewMain);
   //初始化查看密码详细信息界面
   tbViewInfo = new TextBox("详细信息","",200,TextField.ANY);
   cmdDelView =new Command("删除",Command.SCREEN,1);
   cmdModify = new Command("修改",Command.SCREEN,1);
   cmdBackViewInfo =new Command("返回",Command.BACK,1);
   //添加到查看密码详细信息界面中
   tbViewInfo.addCommand(cmdDelView);
   tbViewInfo.addCommand(cmdModify);
   tbViewInfo.addCommand(cmdBackViewInfo);
   
   //初始化查看密码中的修改密码界面
   frmViewModifyPassword = new Form("修改密码");
   tfPasswordView = new TextField("密码:","",20,TextField.PASSWORD);
   tfConfirmPasswordView = new TextField("确认密码:","",20,TextField.PASSWORD);
   cmdModifyView = new Command("确定",Command.OK,1);
   cmdBackViewModify = new Command("返回",Command.BACK,1);
   //添加到修改密码界面
   frmViewModifyPassword.append(tfPasswordView);
   frmViewModifyPassword.append(tfConfirmPasswordView);
   frmViewModifyPassword.addCommand(cmdModifyView);
   frmViewModifyPassword.addCommand(cmdBackViewModify);
   
  //初始化设置密码界面
  frmSetPassword = new Form("设置密码");
  tfPassword = new TextField("密码:","",20,TextField.PASSWORD);
  tfConfirmPassword = new TextField("确认密码:","",20,TextField.PASSWORD);
  cmdEnterSetPassword = new Command("确定",Command.OK,1);
  cmdBackSetPassword = new Command("返回",Command.BACK,1);
  cmdDelSetPassword = new Command("删除",Command.SCREEN,1);
  //添加到设置密码界面
  frmSetPassword.append(tfPassword);
  frmSetPassword.append(tfConfirmPassword);
  frmSetPassword.addCommand(cmdEnterSetPassword);
  frmSetPassword.addCommand(cmdBackSetPassword);
  frmSetPassword.addCommand(cmdDelSetPassword); 
  
  //初始化帮助界面
  frmHelp = new Form("帮助");
  frmHelp.append("开源密码管理软件是一款帮助您管理各种密码的软件,\"增加\"中可以增加新的密码,\"察看\"中可以查看、修改和删除已有的密码,\"设置\"中可以进行该软件的进入密码设置。");
  //初始化返回按钮
  cmdBackHelp = new Command("返回",Command.BACK,1);
  //添加到帮助界面
  frmHelp.addCommand(cmdBackHelp);
  
        //初始化关于界面
        frmAbout = new Form("关于...");
        frmAbout.append("版权所有 2004-   作者:陈跃峰  email:cqucyf@263.net   欢迎您提出该版本的更新建议");
        //初始化返回按钮
        cmdBackAbout = new Command("返回",Command.BACK,1);
        //添加到关于界面
        frmAbout.addCommand(cmdBackAbout);
       
        //初始化提示窗口
        alert = new Alert(title);
       
        //初始化启动时的密码界面
        frmStartPassword = new Form(title);
        //初始化启动时的密码输入文本框
        tfStartPassword = new TextField("请输入密码","",20,TextField.PASSWORD);
        //初始化确定按钮
        cmdEnterStart = new Command("确定",Command.OK,1);
       
        //添加到密码界面中
        frmStartPassword.append(tfStartPassword);
        frmStartPassword.addCommand(cmdEnterStart);
        frmStartPassword.addCommand(cmdExit);       
       
        //事件处理
        lstMain.setCommandListener(this);
        frmHelp.setCommandListener(this);
        frmAbout.setCommandListener(this);
        frmStartPassword.setCommandListener(this);
        frmSetPassword.setCommandListener(this);
        frmAddPassword.setCommandListener(this);
        lstView.setCommandListener(this);
        tbViewInfo.setCommandListener(this);
        frmViewModifyPassword.setCommandListener(this);
       
      /*  //测试代码,添加记录
        try{
      rs = RecordStore.openRecordStore("password",true);
      rs.setRecord(1,new String("123456").getBytes(),0,6);
 
  //    System.out.println(i);
      rs.closeRecordStore();         
        }catch(Exception e){
         System.out.println("测试代码--添加记录:" + e);
        }
      //测试代码,删除所有记录集
      try{
       RecordStore.deleteRecordStore("id");
       RecordStore.deleteRecordStore("pwd");
       RecordStore.deleteRecordStore("remark");
       RecordStore.deleteRecordStore("flag");
       //RecordStore.deleteRecordStore("password");
      }catch(Exception e){
       System.out.println(e);
      }       
 */
    }
 /**
  * 启动方法
  */
    public void startApp () {
     try{
      //打开密码纪录
      rs = RecordStore.openRecordStore("password",false);
      //读取密码
      byte[] b = rs.getRecord(1);
      password = new String(b,"iso8859_1");
      //关闭记录
      rs.closeRecordStore();
      //显示输入密码界面
      display.setCurrent(frmStartPassword);
      
     }catch(Exception e){
      //没有密码记录,则显示主界面
      display.setCurrent(lstMain);
     }
    }

    public void destroyApp(boolean unconditional) {}

    public void pauseApp() {}
 
 /**
  * 事件处理
  */
    public void commandAction(Command c, Displayable s) {
     //处理启动时的密码窗口中的确定按钮事件
     if(c == cmdEnterStart){
      //用户输入的密码
      String pwd = tfStartPassword.getString();
      //判断用户输入是否为空
      if(pwd == null || pwd.length() ==0){ //输入为空
       //显示警告提示
       displayAlert("请输入密码!");
      }else{ //输入不为空
       //比较密码
       if(pwd.equals(password)){ //密码正确
        //显示主界面
        display.setCurrent(lstMain);
       }else{//密码错误
        //显示警告提示
        displayAlert("密码错误,请重新输入!");
       }
      }
     }
   
     //处理退出事件
     if(c == cmdExit){
            destroyApp(false);
            notifyDestroyed();
        }
       
        //处理主界面中的选择
        if(c == cmdEnterMain){
         int index = lstMain.getSelectedIndex();
         
         //System.out.println(index);
         //选择“增加”
         if(index == 0){
          //显示增加密码界面
          display.setCurrent(frmAddPassword);
         }
         //选择“查看”
         if(index == 1){
          //获得密码ID列表
          try{
           //打开flag记录集
           RecordStore rsTemp = RecordStore.openRecordStore("flag",true);
           //打开ID记录集
           rs = RecordStore.openRecordStore("id",true);
           //获得记录集中记录的个数
           int num = rs.getNumRecords();
           //初始化密码ID索引数组
           idIndex = new int[num];
           //创建存储ID的数组
           id = new String[num];
           //将ID信息读入ID数组中
           int j = 0;//代表数组的下标
           for(int i = 1;i <= num;i++){
            //如果flag记录集中的值为0,则读,1代表删除,则不读
            String flagTemp = new String(rsTemp.getRecord(i));
            //System.out.println("" + i + ":" + flagTemp);
            if(flagTemp.equals("0")){
             idIndex[j] = i;  //获得显示的内容于记录集中的索引号的对应关系
             id[j] = new String(rs.getRecord(i),"gb2312");
             j++;
            }
           }
               //清空lstView中的显示
          for(int i = lstView.size() - 1;i >= 0;i--){
           lstView.delete(i);
          }
           //将ID信息显示在lstView中
           for(int i = 0;i < j;i++){
            lstView.append(id[i],null);
           }
           //显示lstView
           display.setCurrent(lstView);
          }catch(Exception e){
           System.out.println("查看密码失败:" +e);
           //查看失败
           displayAlert("查看密码失败!");
          }
         }
         //选择“设置”
         if(index == 2){
          //显示设置密码界面
          display.setCurrent(frmSetPassword);
         }
         //选择“帮助”
         if(index == 3){
          //显示帮助界面
          display.setCurrent(frmHelp);
         }
         //选择“关于”
         if(index == 4){
          //显示关于界面
          display.setCurrent(frmAbout);
         }
         //未选择
         if(index == -1){
          displayAlert("请选择您要察看的项目");
         }
        }
       
        //处理设置密码界面中的返回按钮
        if(c == cmdBackSetPassword){
         //显示主界面
         display.setCurrent(lstMain);
        }
       
        //处理设置密码界面中的确定按钮
        if(c == cmdEnterSetPassword){
         //密码
         String pwd1 = tfPassword.getString();
         //确认密码
         String pwd2 = tfConfirmPassword.getString();
         //判断用户是否输入为空
         if(pwd1.length() !=0 && pwd2.length() != 0){
          //判断密码和确认密码是否相同
          if(pwd1.equals(pwd2)){
           //设置密码
           try{
            //打开密码纪录
         rs = RecordStore.openRecordStore("password",true);
         //System.out.println("rs.getNumRecords():" + rs.getNumRecords());
         //判断是否已设置密码
         if(rs.getNumRecords() > 0){
          //设置密码
          rs.setRecord(1,pwd1.getBytes(),0,pwd1.length());
         }else{ //未设置密码
          rs.addRecord(pwd1.getBytes(),0,pwd1.length());
         }
         //关闭记录
         rs.closeRecordStore();
         //提示修改成功
         displayAlert("密码设置成功");
           }catch(Exception e){
            //System.out.println(e);
            //设置失败
            displayAlert("密码设置失败!");
           }
          }else{
           //提示用户密码和确认密码必须相同
           displayAlert("密码和确认密码不相同");
          }
         }else{
          //提示用户密码和确认密码不能为空
          displayAlert("请检查密码和确认密码是否为空!");
         }
        }
       
        //处理帮助界面中的返回按钮
        if(c == cmdBackHelp){
         //显示主界面
         display.setCurrent(lstMain);
        }
       
        //处理关于界面中的返回按钮
        if(c == cmdBackAbout){
         //显示主界面
         display.setCurrent(lstMain);
        }
       
        //处理增加密码界面中的返回按钮
        if(c == cmdBackAdd){
         //显示主界面
         display.setCurrent(lstMain);
        }
       
        //处理增加密码界面中的确定按钮事件
        if(c == cmdEnterAdd){
         String idAdd = tfId.getString().toString(); //id
         String passwordAdd = tfPsswordAdd.getString();//密码
         String confirmPasswordAdd = tfConfirmPasswordAdd.getString();//确认密码
         String remarkAdd = tfRemark.getString();//备注
         //判断是否完整输入,备注可以为空
         if(idAdd.length() != 0 && passwordAdd.length() != 0 && confirmPasswordAdd.length() != 0){
          //比较密码和确认密码是否相同
          if(passwordAdd.equals(confirmPasswordAdd)){
           //写入记录集中
           try{
            //写入ID
            rs = RecordStore.openRecordStore("id",true);
            rs.addRecord(idAdd.getBytes(),0,idAdd.getBytes().length);
            rs.closeRecordStore();
            //写入密码
            rs = RecordStore.openRecordStore("pwd",true);
            rs.addRecord(passwordAdd.getBytes(),0,passwordAdd.getBytes().length);
            rs.closeRecordStore();
            //写入备注
            rs = RecordStore.openRecordStore("remark",true);
            rs.addRecord(remarkAdd.getBytes(),0,remarkAdd.getBytes().length);
            rs.closeRecordStore();
            //写入是否删除的标记,0代表正常,1代表删除
            rs = RecordStore.openRecordStore("flag",true);
            rs.addRecord(new String("0").getBytes(),0,1);
            rs.closeRecordStore();
            //提示密码增加成功
            displayAlert("密码增加成功!");
           }catch(Exception e){
            //显示警告信息
            displayAlert("增加密码失败!");
           }
          }else{
           //显示警告信息
           displayAlert("密码和确认密码是否相同!");
          }
         }else{
          //显示警告信息
          displayAlert("请检查输入是否完整!");
         }         
        }
       
      //处理查看密码主界面中的返回按钮
      if(c == cmdBackViewMain){
        //显示主界面
         display.setCurrent(lstMain);       
      }
     
      //处理查看密码主界面中的查看按钮事件
      if(c == cmdInfo){
       int index = lstView.getSelectedIndex();  //需要查看的信息id
       //如果没有记录,则直接返回
       if(index == -1) return;
       
       //获得信息
       String s1 = getInfoById(idIndex[index]);
       if(s != null){
        //显示到tbViewInfo中
        tbViewInfo.setString(s1);
       }else{
        //显示提示信息,查看失败
        displayAlert("无法获得详细信息");
       }
       //显示密码详细信息界面
       display.setCurrent(tbViewInfo);
      }
     
      //处理密码详细信息界面中的返回按钮事件
      if(c == cmdBackViewInfo){
       //显示查看密码主界面
       display.setCurrent(lstView);
      }
     
      //处理密码详细信息界面中的修改按钮事件
      if(c == cmdModify){
       //显示修改密码界面
       display.setCurrent(frmViewModifyPassword);
      }
     
      //处理密码详细信息界面中的删除按钮事件
      if(c == cmdDelView){
       //查看密码界面中被选中的索引号
       int index = lstView.getSelectedIndex();
       //删除纪录集中的内容
       try{
        //向记录集中的flag内容中写入删除标记
        rs = RecordStore.openRecordStore("flag",true);
        rs.setRecord(idIndex[index],new String("1").getBytes(),0,1);
        rs.closeRecordStore();
        //返回主界面
        display.setCurrent(lstMain);
       }catch(Exception e){
        System.out.println(e);
        //显示警告信息
        displayAlert("删除密码失败,请重试!");
       }       
      }
     
      //处理修改密码界面中的返回按钮事件
      if(c == cmdBackViewModify){
       int index = lstView.getSelectedIndex();  //需要查看的信息id
       //获得信息
       String s1 = getInfoById(idIndex[index]);
       if(s != null){
        //显示到tbViewInfo中
        tbViewInfo.setString(s1);
       }else{
        //显示提示信息,查看失败
        displayAlert("无法获得详细信息");
       }
       //显示密码详细信息界面
       display.setCurrent(tbViewInfo);
      }
     
      //处理修改密码界面中的修改按钮事件
      if(c == cmdModifyView){
      //密码框用户输入
       String pwd1 = tfPasswordView.getString();
       //确认密码框用户输入
       String pwd2 = tfConfirmPasswordView.getString();
       //判断用户的输入
       if(pwd1.length() != 0 && pwd2.length() != 0){ //用户输入了密码和确认密码
        //判断密码和确认密码是否相同
        if(pwd1.equals(pwd2)){//相同
         int index = lstView.getSelectedIndex();  //需要查看的信息id
         //修改密码
         try{
          //修改密码
          rs = RecordStore.openRecordStore("pwd",true);
          rs.setRecord(idIndex[index],pwd1.getBytes(),0,pwd1.length());
          rs.closeRecordStore();
          //显示
          //获得信息
          String s1 = getInfoById(idIndex[index]);
          if(s != null){
           //显示到tbViewInfo中
           tbViewInfo.setString(s1);
          }else{
          //显示提示信息,查看失败
           displayAlert("无法获得详细信息");
          }
          //显示密码详细信息界面
          display.setCurrent(tbViewInfo);
         }catch(Exception e){
          //显示修改失败
          displayAlert("修改密码失败");
         }
        }else{//不相同
         //显示密码和确认密码不相同
         displayAlert("密码和确认密码不同!");
        }
       }else{ //密码或者确认密码,用户未输入
        //提示用户输入
        displayAlert("请检查输入是否完整,其中密码和确认密码均不能为空!");
       }
      }
     
      //设置进入密码界面中的删除按钮事件
      if(c == cmdDelSetPassword){
       try{
        //判断用户是否已设置密码
        rs = RecordStore.openRecordStore("password",true);
        int numTemp = rs.getNumRecords(); //记录集中的纪录数量
        rs.closeRecordStore();
        //用户已设置密码
        if(numTemp > 0){   
         //删除,彻底删除
         RecordStore.deleteRecordStore("password");
         //提示删除密码成功
         displayAlert("删除密码成功,请返回!");
        }else{//用户未设置密码
         //提示尚未设置密码
         displayAlert("您尚未设置密码,无法删除!");
        }
       }catch(Exception e){
        
        //显示删除失败
        displayAlert("删除密码失败,请重试!");
       }
      }
    }
   
    /**
     *显示提示或者警告信息
     *@param msg 信息内容
     */
    public final void displayAlert(String msg){
        //设置提示信息
        alert.setString(msg);
        //显示3秒
        alert.setTimeout(3000);
        display.setCurrent(alert);     
    }
   
    /**
     * 获得指定id的纪录内容,包括密码id,密码和备注信息
     * @param id 获得的记录的ID
     * @return 记录的内容
     */
    public final String getInfoById(int id){
     try{
      //密码ID
      rs = RecordStore.openRecordStore("id",false);
        String idView = new String(rs.getRecord(id)).toString();
        rs.closeRecordStore();
        //密码
        rs = RecordStore.openRecordStore("pwd",false);
   String pwdView = new String(rs.getRecord(id)).toString();
        rs.closeRecordStore();
        //备注
        rs = RecordStore.openRecordStore("remark",false);
        String remarkView = new String(rs.getRecord(id)).toString();
        rs.closeRecordStore();
        //返回
        return "密码id:" + idView + "  密码:" + pwdView + "  备注:" + remarkView;
  }catch(Exception e){
   System.out.println (e);
   return null;
  }        
    }
}

myPasswords:小型密码管理器项目 我的密码 使用Spring Boot 、 Spring Security和AngularJS小型密码管理器项目 如何启动项目 在 Eclipse 中:运行MyPasswordApplication.java ; 使用 gradle:在命令行gradle bootRun上执行 启动网络浏览器并点击 用户凭据为:user、user123 立即下载

相关推荐

Smart Password Manager:控制台智能密码管理器。-开源

智能密码管理器-创建具有检索和恢复它们的功能的复杂密码。 管理员不会存储您的密码,而是即时生成它们。 -仅存储公钥。 攻击者很难或几乎不可能窃取您的密码。 不使用加密。 -您可以使用任何易于记忆的秘密短语来获取或恢复密码,并带有指向用户名或任何单词的链接。 -不再需要记住,编写和加密长度为4-100个字符的复杂密码。 -带有案例的文件以明文形式存储,即使它被攻击者窃取了,也几乎没有恢复密码的机会。 -仅记住秘密短语非常重要,如果忘记了该短语,将无法获取或恢复密码。

30 秒使用 Sealos 搭建个人密码管理器 Vaultwarden

我一开始用的确实是 LastPass,但是 LastPass 的价格策略频繁调整,从一开始的免费,到后来逐渐收费,让我开始对其提高警惕。而且,尽管它的安全记录相对来说比较良好,但经历过数次的漏洞曝出,让我对于其中的数据安全产生了疑虑。一次偶然的机会,Bitwarden 闯入了我的视线。超过 8 年网龄的我,注册过很多网站帐号,每个网站的密码我都用不同的复杂密码。在这里可以根据情况对 Vaultwarden 进行一些可选设置,所有的设置项都可以通过鼠标悬停查看相应的说明,不了解的选项建议保持默认。

云原生实验室 733

原生android 密码管理app

一个用于保存账号和密码的app。主要用到的知识点:expandlistview父元素与子元素的长按事件及点击事件,Fragment的使用,litepal的使用,AES加密,自定义控件等。对于生活中特别重要的密码,可以对分组设置单独设置密码,将重要密码放入该分组,进行双重保护。注意:app卸载后密码信息也将丢失。

Padloc 开源密码管理器安装与使用指南

`Padloc` 是一个现代的、面向个人和团队的开源密码管理器。其项目结构精心设计,以支持多个包和组件协同工作。以下是一些关键的目录及其简要描述: - **`src`**: 主要的源代码目录,包含各个核心组件的源码。 - `app`: 网页界面组件。 - `core`: 核心逻辑处理部分。 - `electron`, `cordova`, `pwa`, `tauri...

gitblog_00721的博客 854

基于Springboot的密码管理平台(源码+数据库脚本) .zip

记住密码对头脑简单的人是个苦差,有规律点虽然好记,但是不能防熟人,压根没规律,最安全,但是你记得住吗

搭建微信机器人的方案都在这了!

功能超级强大,虽不支持二次开发,但已有的功能足够个人使用,可惜官方作品已被腾讯告死,好在市面上还流落着不少破解版,有需要的自行搜索。可惜的是,微信官方已不准许新的微信号再使用 web 登录,这就直接从源头扼杀了 web 协议的微信机器人,虽说老的微信号还是能凑合着用,不过部分功能也受限。所以,这些都属于 PC 端的微信机器人。无论是 PC 端还是手机端,用 hook 方式实现的最大缺点就是要和某一个版本的微信客户端进行绑定,如果框架本身不对最新版本的微信适配,那使用的时候就无法升级到最新版本的微信。

weixin_47246330的博客 1万+

bitwarden密码管理和搭建服务说明

工欲善其事,必先利其器。使用好的密码管理让你信息更安全,减少密码记忆,提高效率。最开始所有网站和银行卡都是使用通用账号和密码,感觉还挺爽YY,碰到网站就直接输入那个密码就行,后来QQ经常提醒异地登录,才知道其中一个网站密码被泄露了,可以使用同样账号和密码登录我注册过所有网站。太可怕了,后来使用网站名偏移,每个字母向后移2位,163就变成385了,这样每个网站密码都不一样,使用一段时间,发现某些品牌...

j280560101的专栏 1万+

PCA9698嵌入式C++驱动库:高性能I²C GPIO扩展方案

GPIO扩展是嵌入式系统中解决MCU引脚资源不足的关键技术,其核心原理在于通过串行总线(如I²C)桥接主控与外设寄存器,实现逻辑引脚到物理IO的映射与状态同步。技术价值体现在低开销、高确定性与多设备可扩展性,广泛应用于工业控制、传感器节点和LED矩阵驱动等实时场景。本文聚焦PCA9698——一款支持24通道双向IO、中断输出与可编程驱动模式的I²C GPIO扩展芯片,结合其C++驱动库的影子寄存器机制、端口级原子操作及非阻塞同步设计,提供面向资源受限平台(如ATmega2560)的工程就绪方案。

weixin_35756637的博客 628

网盘直链下载助手教程:用 LinkSwift 脚本把九大网盘文件变成可下载的直链

网盘直链下载助手(脚本名 LinkSwift)是一款基于 JavaScript 的 Tampermonkey 油猴脚本,它在你已登录的网盘网页上注入下载入口,调用网盘服务商的公开接口取得文件真实下载地址,再交给 IDM、Motrix、Aria2、cURL 或比特彗星等下载器去下载。需要先说清楚:它属于“取链工具”,不是限速破解器,实际速度仍由你账号自身的权限决定。 ## 它解决的是什么问题 结

gitblog_00639的博客 349

SAR成像系列:【9】合成孔径雷达(SAR)成像算法-波数域(omega-K)成像算法[也叫距离徙动(RM)算法](附Matlab代码)

合成孔径雷达(SAR)波数域(wK)成像算法也称为距离徙动(RM)算法,它不存在近似条件,可以对整个成像区域基于散射点模型进行精确聚焦。有的文章中称它为SAR成像的最佳实现。

zr2006_7的专栏 1万+

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第10套模块A:网络构建 & (五)网络运维配置+(六)SDN网络配置-命令配置

【赛题解析&命令脚本配置】2023年全国职业院校技能大赛GZ073网络系统管理赛项赛题第10套模块A:网络构建 & (五)网络运维配置+(六)SDN网络配置-命令配置

君逍遥o 812

一款现代、安全、开源的密码管理器,可存储和管理您最敏感的信息

KeePassXC被设计用于帮助用户安全地存储和管理各种敏感信息,如用户名、密码、URLs、附件、笔记等。这些信息被加密存储在一个本地文件中,这个文件可以保存在任何位置,包括私有或公共云解决方案中,但主要强调的是离线存储和安全性。

yunmoon的博客 3191

手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例

目录手把手教你学Simulink——基于Simulink的全双工无线通信仿真建模示例一、背景介绍二、所需工具和环境三、步骤详解步骤1:创建Simulink模型步骤2:设计输入信号步骤3:添加调制模块步骤4:添加自干扰消除模块步骤5:添加AWGN信道步骤6:添加接收端处理步骤7:添加解调模块步骤8:计算误码率(BER)步骤9:添加显示模块步骤10:设置仿真参数步骤11:运行仿真并分析结果四、总结 全双工(Full-Duplex)无线通信技术允许在同一频段上同时进行数据的发送和接收,这与传统的半双工(Half-

MHD0815的博客 183

Bitwarden:电脑端的开源密码管理神器

Bitwarden 是一款开源且功能强大的密码管理器,专为电脑用户设计,提供安全、便捷的密码存储和管理解决方案。它采用先进的加密技术,确保用户密码和敏感信息的安全性,同时支持多平台同步,包括Windows、macOS、Linux等主流操作系统。账户注册成功后,就可以进入密码管理界面当中,软件支持管理登录密码、支付卡密码、身份信息、安全笔记等内容,功能相对还是比较丰富的。密码添加非常简单,输入账户名、密码并输入对应的网站网址,就能自动识别出对应的网站。甚至你都不需要点,只要打开网站,它就可以全自动填充密码!

2501_90259289的博客 748

条件DDPM:Diffusion model的第三个巅峰之作

前言:DDPM从2020年诞生,短短一年的时间,模型上有两个巨大的改进,其中一个就是condition的引入,最近大部分DDPM相关的论文都会讨论这一点,有些文章称之为latent variable。和当年GAN的发展类似,CGAN和DCGAN的出现极大程度上促进了GAN的发扬光大,意义重大。本文基于前面几篇文章继续聊一聊: 从VAE到Diffusion Model_沉迷单车的追风少年-优快云博客 为什么diffusion model扩散模型可以称为score-based models?_沉迷单车的.

沉迷单车的追风少年 1万+

编写python脚本调用ordinals以及BRC20的接口

1、钱包地址生成walletreceive,对应ord命令:ord wallet receive。6、测试手动出块generate,这个只在regtest链节点用得上。所有接口都是post请求,采用postman进行测试。4、测试bitcoin转币sendtoaddress。7、测试其他的wallet方法wallet。2、钱包币种铭刻inscription,对应bitcoin-cli命令。对应bitcoin-cli命令。对应bitcoin-cli命令。fee.json文本模板。还可以加很多根据需要加减。

云深海阔专栏 1049

密码生成器开源项目教程

密码生成器开源项目教程 项目介绍 密码生成器是一款基于Python编写的开源工具,旨在帮助用户轻松生成高强度、随机且安全的密码。它支持多种配置选项,可以根据用户的特定需求定制密码的长度、是否包含大小写字母、数字以及特殊字符等,确保了密码的复杂度和不可预测性,非常适合于日常使用或管理多个账户时的安全需求。 项目快速启动 要快速启动并使用密码生成器,首先需要从GitHub克隆该项目到本地: git c...

gitblog_00394的博客 464

1️⃣ Coze智能体基础入门教学(2025年全新版本)

不妨设想一下,倘若我们能够打造出一个数字助手,它不但能精准洞悉我们的需求,更可以独立思索、学习以及付诸行动,这便是 AI Agent 的基础理念。它恰似计算机世界里的 “智慧精灵”,能够感知周遭环境、做出判断并采取行动。AI Agent 的发展之路精彩纷呈。它走过了三个重要阶段:起初,它犹如一个被规则束缚的机器人,只能按预设好的指令开展工作。接着,它学会运用统计学方法,通过分析数据来做决策,变得越发灵活。到如今,凭借深度学习技术,它已经能够像人类一样去学习复杂的任务了。

李同学Lino的博客 4088

开源项目密码管理扩展:Nextcloud Passwords 浏览器插件指南

开源项目密码管理扩展:Nextcloud Passwords 浏览器插件指南 1. 项目目录结构及介绍 本教程基于marius-wieschollek/passwords-webextension项目,该项目为Nextcloud的密码应用提供了官方浏览器扩展支持。以下是核心的目录结构概述: src: 包含了主要的源代码文件,是开发和编译的基础。 scripts: 存放脚本文件,用于构建、测试...

gitblog_01019的博客 525

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

SAP B1中文培訓教材_SDK

公司内部培训资料,对开发工具 ,DIAPI, UIAPI,Add-ON有详细解说

如何快速搭建Buttercup Desktop开发环境:从零开始贡献开源密码管理器

Buttercup Desktop是一款跨平台密码管理器,作为开源项目,它允许开发者参与贡献并定制功能。本文将详细介绍如何从零开始搭建Buttercup Desktop的开发环境,帮助你快速加入这个安全工具的开发社区。 [![Buttercup Desktop密码管理器界面](https://raw.gitcode.com/gh_mirrors/bu/buttercup-desktop/raw/

gitblog_00591的博客 409

android 蓝牙通讯demo

android 下蓝牙通讯demo,实现了发现蓝牙,使能蓝牙,通过蓝牙发送消息。

iCloud密码管理器Firefox扩展项目教程

iCloud密码管理器Firefox扩展项目教程 1. 项目目录结构及介绍 本项目是一个开源的Firefox扩展,用于管理通过iCloud Keychain存储的密码。以下是项目的目录结构及其介绍: icloud-passwords-firefox/ ├── .github/ # GitHub相关配置文件 ├── src/ # 源...

gitblog_01148的博客 400

【亲测免费】 KeyPass密码管理器安装与使用指南

在克隆或下载KeyPass项目之后,您将看到以下主要目录和文件: - **src/**: 源代码的主要存放位置。 - `main/java/com/yogeshpaliyal/keypass`: Java源码目录,其中包含应用的所有功能实现。 - `DatabaseManager.java`: 负责数据库操作的关键类。 - `PasswordGenerat...

gitblog_01083的博客 819

【亲测免费】 密码管理工具(password)使用手册

密码管理工具(password)使用手册 欢迎来到密码管理工具的安装与使用指南。本项目来源于GitHub的开源仓库 breakwa11/password,旨在提供一个安全且高效的密码存储解决方案。以下是关于该项目的核心模块介绍,包括其目录结构、启动文件以及配置文件的详细说明。 1. 项目目录结构及介绍 password/ │ ├── src/ # 源代码主目录 │...

gitblog_00740的博客 626

JPass 开源项目启动与配置教程

JPass 开源项目启动与配置教程 1. 项目的目录结构及介绍 JPass 是一个开源的密码管理工具,旨在帮助用户安全地管理他们的密码。以下是项目的目录结构及相应介绍: jpass │ ├── .gitignore # 指定Git应该忽略的文件和目录 ├── build.gradle # Gradle构建脚本 ├── gradle.properties # Gradl...

gitblog_01167的博客 385
上一篇: 在.NET中实现彩色光标,动画光标和自定义光标
下一篇: 面向表格编程的力量——Butler介绍(翻译)
java2000_test
博客等级 码龄19年 10粉丝 320原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值