应用JAVA进行密码加密的一种算法

发表于《河北科技大学学报》(2007-7 Vol.28,P122)

摘要:在这篇文章中将要介绍一种简单的密码不可逆加密算法的实现,代码采用的是java语言。现在网络的很多功能都要求网络用户在进行注册后,登陆才有权使用。一般来说注册信息中都要包含用户名、密码、电子邮箱等内容。对于密码,一般要进行不可逆的加密存储,也就是说从密码可以演算到密文,但从密文不能够反演出密码。

关键词:密码;加密;java;算法

     中图分类号:TP301. 6             文献标识码:A                 文章编号:

 


1 代码的功能及密码到密文的算法

下面对代码每一部分功能及如何实现密文不能反演出密码的算法。

Main()主方法的主要功能是输入密码,显示输入的密码,输出演算出的密文。演算密码的功能将在方法transf(char c,int i)和方法cryptograph(int[] n,int i)中实现。

方法transf(char c)的功能是将密码进行初步的转换,将密码中的每个字符分类并按照不同的类型将密码的每个字符的ASCII码加上一个干扰的偏移量,这里偏移量的取法为:若该为字符为“0”~“9”的数字则将其ASCII码加上数字1,若该为字符为“a”~“z”的数字则将其ASCII码加上数字2,若该为字符为“A”~“Z”的数字则将其ASCII码加上数字3。这将对反演密码带来一定的干扰。通过调用方法transf(char c)可以得到int[]类型的数组,其值为密码的ASCII码加上相应的偏移量。真正实现密文不能反演出密码的过程是通过方法cryptograph(int[] n,int i)来实现的。

方法cryptograph(int[] n,int i),主要实现了密文无法反演出密码的功能。主要算法如下:在处理第j(其含义见此方法中的变量j)位密码时对由方法transf(char c)算得的转译数组除第j个元素外的其他元素的值累加到int 类型变量modnumber中 ;然后对变量

modnumber进行校验,分析其是奇数还是偶数,根据分析结果再进行下一步的处理;(1)若modnumber为偶数则将对应位的密码移

位3位小写英文字母,处理过程为,将转译数组的j个元素安位不带符号的右移4位(将原有内容进行隐藏)再加上变量modnumber,得到新的变量rightn,取变量rightn对25(英文字母共26个,将26减去1)的余数加上97(小写英文字母a的ASCII码值),将得到的数值转换成字符放到密文的对应位置(由变量numch决定);(2)若modnumber为奇数,与(1)相同得到变量rightn的值,取变量rightn对9(阿拉伯数字共10个,将10减1)的余数加上48(阿拉伯数字0的ASCII码值),将得到的数值转换成字符放到密文的对应位置(由变量numch决定)。经过方法cryptograph(int[] n,int i)的处理后密文将很难再被演算成密码,因为在从密码演算密文的过程中已经将密码的一些信息丢弃。

2JAVA语言对算法的实现

import java.io.*;

public class Encrypt {

public static void main(String args[]){

int nch[]=new int[20];     //密文中间变量

int slong=0;             //s 的长度

String s;                //存储密码(英文字符),密码长度不超过20个英文字符

String cryp;             //存放密文

char ch[]=new char[20];   //存放密码的每个字符

BufferedReader in= new BufferedReader(new InputStreamReader(System.in));

try{

s=in.readLine();      //获取密码

slong=s.length();     //获取字符串长度

if(slong>20){

slong=20;

s=s.substring(0,20);     //如果密码长度大于20个字符,只取前20个字符

}

System.out.println("s="+s);   //显示输入的密码

ch=s.toCharArray();         //将密码付值给字符数组

}catch(IOException e){

System.out.println(e);

}

for(int i=0;i<slong;i++){

nch[i]=transf(ch[i],i);        // 获得密文钥匙

}

cryp=cryptograph(nch,slong);

System.out.println("cryp="+cryp);  //输出密文

}

public static int transf(char c){         //演算密文钥匙

if(c>='0'&&c<='9'){

return c+1;

}

else if(c>='a'&&c<='z'){

return c+2;

}

else if(c>='A'&&c<='Z'){

return c+3;

}

else return c;

}

public static String cryptograph(int[] n,int i){          //演算密文

int j;                     //用于循环

int numch=0;              //数组ch[]中圆熟的实际最大元素个数

int modnumber=0;

char[] ch=new char[i*3];

String s="";

String sch;

for(j=0;j<i;j++){

for(int k=1;k<i;k++){

modnumber+=n[(i-(j-k))%i];

}

int rightn=0;

if(modnumber%2==0){

rightn=modnumber+(n[j]>>>4);

ch[numch++]=(char)(rightn%25+97);

rightn=rightn/10;

ch[numch++]=(char)(rightn%25+97);

ch[numch++]=(char)(modnumber%25+97);

}

else{

rightn=modnumber+(n[j]>>>4);

ch[numch++]=(char)(rightn%9+48);

rightn=rightn/10;

ch[numch++]=(char)(rightn%9+48);

ch[numch++]=(char)(modnumber%9+48);

}

}

for(j=0;j<numch;j++){

s=s+ch[j];

}

return s;

}

}

3  结束语

这里提供一种简单密码加密的解决方案,我们在电工电子实验网上教学平台的学生注册和学生登陆页面上采用了此算法,运行可靠。

参考文献:

[1] 丁振凡 主编Java语言实用教程[M]. 北京邮电大学出版社. 2005年2月. 第一版

[2] [美]James Gosling,Bill Joy,Guy Steele著,蒋国新 朱暄 李洪伟译  Java语言规范[M]. 北京大学出版社. 1997年12月第一版

应用JAVA进行密码加密的一种算法相关推荐

  1. Java代码实现负载均衡五种算法

    前言: 负载均衡是为了解决并发情况下,多个请求访问,把请求通过提前约定好的规则转发给各个server.其中有好几个种经典的算法.在用java代码编写这几种算法之前,先来了解一下负载均衡这个概念. 1. ...

  2. java web项目中对数据库用户名密码加密的一种解决方案

    原文路径:https://blog.csdn.net/u010463032/article/details/7900906 我们使用的项目经常是这个样子的: <bean id="dat ...

  3. java提供密码加密的实现

    Md5加密 /*** 提供密码加密的类*/ public class Md5Util {public static String encode(String msg){try {MessageDige ...

  4. Spring Boot 密码加密的 2 种姿势!

    先说一句:密码是无法解密的. 密码无法解密,还是为了确保系统安全.今天松就来和大家聊一聊,密码要如何处理,才能在最大程度上确保我们的系统安全. 1.为什么要加密 2011 年 12 月 21 日,有人 ...

  5. BCrypt加密怎么存入数据库_Spring Boot 中密码加密的两种姿势

    1.为什么要加密 2.加密方案 3.实践3.1 codec 加密3.2 BCryptPasswordEncoder 加密 4.源码浅析 先说一句:密码是无法解密的.大家也不要再问松哥微人事项目中的密码 ...

  6. java登陆密码加密怎么做,Java如何实现密码加密

    在查询时,我们如果要对用户的登录信息进行加密,通常会将其密码进行加密. 1) 可以借助spring框架工具类DigestUtils 2) 也可以使用shiro框架来实现 以上就是两者方式分别使用, 注 ...

  7. (java)密码加密。某系统的数字密码,比如1983,采用加密方式进行传输,规则如下:先得到每位数,然后每位数都加上5,再对10求余,最后将所有数字反转,得到一串新数。

    package com.ag.practice;import java.util.Scanner;public class jiami { //某系统的数字密码,比如1983,采用加密方式进行传输,规 ...

  8. Java——MD5密码加密

    目录 1.MD5概述 1.1.什么是MD5? 1.2.MD5加密作用 1.3.什么要使用MD5加密? 2.MD5加密流程 2.1.工具类导入 2.2.用户注册模块使用MD5 2.3.登录问题解决 1. ...

  9. java 明文密码加密解密,明文加密解密处理

    配置文件加密和数据库一些内容的加密存储 背景 在一些项目的设计中,密码等一些重要的东西显然是不能出现在代码和数据库中的.如果出现,这显然是不符合安全规定的.所以我们就需要加密存储和解密取出,这就用了本 ...

最新文章

  1. RDKit:计算不同小分子构象之间的RMSD
  2. JavaScript 方法传参
  3. 云计算:革新动力并不是一把万能钥匙
  4. linux驱动双摄像头,详解linux 摄像头驱动编写
  5. Hive的索引操作【小结】
  6. 洛谷--P1067 多项式输出
  7. 禅道类似软件_项目管理软件之争,禅道和JIRA大对比
  8. LVS部分调度算法的适应场景分析
  9. HTTP:一次完整的HTTP服务过程
  10. 【转】翟永超大牛的 博客,SpringBoot SpringCloud应有尽有,转发请备注
  11. Python tkinter Canvas画布完全攻略
  12. Java 分布式面试题集合
  13. Pytorch加载.pth文件
  14. dellt130服务器做系统,戴尔Dell R330;T130安装系统后键盘鼠标不能使用
  15. TP-link二级路由器配置
  16. 牛客网练习—《网络基础》DAY2
  17. 什么是SSL安全证书
  18. 解析XML文件(字符串)的两种方法-----SAXReader 与 DocumentHelper
  19. 基于约束的装配设计【CadQuery】
  20. linux ps与top 命令下wa,hi,si,st等及 VSZ,RSS,VIRT,RES,等关键字含义详解!

热门文章

  1. 2020ICPC·小米 网络选拔赛第一场 D.Router Mesh
  2. Javascript的HTML DOM (文档对象模型)
  3. JavaScript DOM文档对象模型小结
  4. python中的linq - asq
  5. android智能手机排行,安卓手机排行榜2017:2017安卓智能手机排行榜
  6. Ubuntu16.04死机了怎么办
  7. 怎么做tiktok跨境电商,怎么监测?
  8. linux同步到云盘,Linux命令行上传文件到百度网盘
  9. R语言t分布正态分布分位数图
  10. Android-五子连珠(三)-自定义的view