密码加密

EncoderUtil.java

package com.huawei.utils;

import java.io.IOException;
import java.io.UnsupportedEncodingException;
import java.nio.charset.Charset;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

/**
* Created by Administrator on 2015/3/8.
* 编码工具
*/
public class EncoderUtil {
private static final String charset = "UTF-8";

/**
* MD5加密
*/
public static class MD5 {
private static final char[] hex = {‘0‘, ‘1‘, ‘2‘, ‘3‘, ‘4‘, ‘5‘, ‘6‘, ‘7‘, ‘8‘, ‘9‘, ‘a‘, ‘b‘, ‘c‘, ‘d‘, ‘e‘, ‘f‘};
public static String encode(String raw) {
if (raw == null || raw.length() < 0) {
return "";
}
StringBuffer result = new StringBuffer("");
try {
MessageDigest MD5 = MessageDigest.getInstance("MD5");
byte[] bytes = MD5.digest(raw.getBytes(charset));
for (byte _byte : bytes) {
result.append(hex[_byte >>> 4 & 0xf]);
result.append(hex[_byte & 0xf]);
}
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return result.toString();
}
}

/**
* SHA1加密
*/
public static class SHA1 {
public static String encode(String raw) {
try {
MessageDigest digest = MessageDigest.getInstance("SHA-1");
digest.update(raw.getBytes(charset));
byte[] bytes = digest.digest();
StringBuffer buffer = new StringBuffer();
for (byte b : bytes) {
String shaHex = Integer.toHexString(b & 0xFF);
if (shaHex.length() < 2) {
buffer.append(0);
}
buffer.append(shaHex);
}
return buffer.toString();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
}
return "";
}
}

/**
* Base64加密与解密
*/
public static class BASE64 {
private final static char[] chars = new char[]{‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘,‘G‘,‘H‘,‘I‘,‘J‘,‘K‘,‘L‘,‘M‘,‘N‘,‘O‘,‘P‘,‘Q‘,‘R‘,‘S‘,‘T‘,‘U‘,‘V‘,‘W‘,‘X‘,‘Y‘,‘Z‘,‘a‘,‘b‘,‘c‘,‘d‘,‘e‘,‘f‘,‘g‘,‘h‘,‘i‘,‘j‘,‘k‘,‘l‘,‘m‘,‘n‘,‘o‘,‘p‘,‘q‘,‘r‘,‘s‘,‘t‘,‘u‘,‘v‘,‘w‘,‘x‘,‘y‘,‘z‘,‘0‘,‘1‘,‘2‘,‘3‘,‘4‘,‘5‘,‘6‘,‘7‘,‘8‘,‘9‘,‘+‘,‘/‘};
public static String encode(String raw){
if (raw == null)
return "";
byte []raws = raw.getBytes(Charset.forName("UTF-8"));
int mod = raws.length % 3;
int group = (raws.length + 2) / 3;
byte []bytes = new byte[group * 3];
System.arraycopy(raws,0,bytes,0,raws.length);
StringBuilder sb = new StringBuilder();
for(int i = 0;i<group;i++){
sb.append(chars[(byte)((bytes[i*3]&0xff) >> 2)]);
sb.append(chars[(byte)((((bytes[i*3]&0xff)&0x03) << 4) | ((bytes[i*3+1]&0xff) >> 4))]);
sb.append(chars[(byte)((((bytes[i*3+1]&0xff)&0x0f) << 2) | ((bytes[i*3+2]&0xff) >> 6))]);
sb.append(chars[(byte)((bytes[i*3+2]&0xff)&0x3f)]);
}
if(mod!=0)
sb.replace(sb.length()-(2/mod),sb.length(),"==".substring(0,2/mod));
return sb.toString();
}

public static String decode(String raw){
if (raw.length() % 4 != 0)
throw new IllegalArgumentException("参数错误!");
String decode = String.valueOf(chars);
byte []raws = raw.getBytes(Charset.forName("UTF-8"));
int numExtraBytes = raw.endsWith("==") ? 2 : (raw.endsWith("=") ? 1 : 0);
int group = raws.length / 4;
byte []bytes = new byte[group * 3];
for (int i=0;i<group;i++){
bytes[i*3] = (byte)((decode.indexOf(raws[i*4]) << 2) | ((decode.indexOf(raws[i*4+1]) & 0x30) >>> 4));
bytes[i*3+1] = (byte)(((decode.indexOf(raws[i*4+1]) & 0x0f) << 4) | ((decode.indexOf(raws[i*4+2]) & 0x3c) >>> 2));
bytes[i*3+2] = (byte)(((decode.indexOf(raws[i*4+2]) & 0x03) << 6) | ((decode.indexOf(raws[i*4+3]) & 0x3f)));
}
return new String(bytes,0,bytes.length-numExtraBytes,Charset.forName("UTF-8"));
}
}
public static void main(String[] args) throws NoSuchAlgorithmException, IOException {
System.out.println(BASE64.encode("hsjhfliawehfk"));
System.out.println(BASE64.decode(BASE64.encode("就是巍峨长撒啊哈akshfah阿莱克斯京东方")));
System.out.println(SHA1.encode("HAHJKjhfliawehfk"));
System.out.println(SHA1.encode("HAHJKjhfliawehfk"));
System.out.println(SHA1.encode("hsjhfliawehfkad"));
System.out.println(SHA1.encode("hsjhfliawehfk策划活动"));
System.out.println(MD5.encode(MD5.encode(MD5.encode("wangwutest7"))));
System.out.println(MD5.encode("admin"));
}
}

时间: 2024-10-19 00:28:36

密码加密的相关文章

extmail 密码加密方式修改为plain-md5的方法

extmail默认密码加密方式是md5crypt,但是有些时候会遇到这样的问题--老的邮件系统中的用户密码是md5加密的. 此时需要将extmail的密码加密方式修改为md5,通过官方解释(md5和md5crypt没有区别),修改为plain-md5即可.但是,这只解决了web登陆的验证问题,没有解决smtp以及pop3的验证问题. 通过 http://www.extmail.org/forum/viewthread.php?tid=3175 帖子解决了验证问题,内容摘录如下: courier-

用户密码加密存储十问十答,一文说透密码安全存储

我们数据库的权限管理十分严格,敏感信息开发工程师都看不到,密码明文存储不行吗? 不行.存储在数据库的数据面临很多威胁,有应用程序层面.数据库层面的.操作系统层面的.机房层面的.员工层面的,想做到百分百不被黑客窃取,非常困难. 如果密码是加密之后再存储,那么即便被拖库,黑客也难以获取用户的明文密码.可以说,密码加密存储是用户账户系统的底裤,它的重要性,相当于你独自出远门时缝在内衣里钱,虽然你用到他们的概率不大,但关键时刻他们能救命. 那用加密算法比如AES,把密码加密下再存,需要明文的时候我再解密

SQLSERVER使用密码加密备份文件以防止未经授权还原数据库

原文:SQLSERVER使用密码加密备份文件以防止未经授权还原数据库 SQLSERVER使用密码加密备份文件以防止未经授权还原数据库 在备份数据库的时候,用户可以为媒体集.备份集或两者指定密码 在backup语句中,定义备份集密码和媒体密码为可选功能.使用密码可防止利用SQLSERVER工具未经授权地执行还原操作和在媒体中添加备份集. 如果指定了密码则用户还必须提供媒体密码才能执行这些操作 关于媒体集和备份集大家可以参考MSDN:http://msdn.microsoft.com/zh-cn/l

C#:使用MD5对用户密码加密与解密

C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1)16位的MD5加密 /// <summary> /// 16位MD5加密 /// </summary> /// <param name="password"></param> /// <returns></returns&

seci-log 1.10 发布 增加了全文搜索集成密码加密等多个功能点

日志分析软件增加了多个功能点 1.修改了windows2003 扫描资产的错误. 2.增加了密码加密功能,对邮件,远程机器访问的秘密进行加密,会更安全一些. 3.增加了资产统计报表 4.完善了整体报告,增加了告警主机排行和告警类型排行. 5.增加了登录统计报表 6.整合了全文搜索.这样就可以去掉了Kibana,虽然我们的功能还是有点弱,但是查询没有问题了.具体看下图,搜索192.168.0.104 loginin su就会像百度一下吧相关日志搜索出来. 欢迎大家使用

Java密码加密与解密

Java密码加密与解密 Java中对代码进行加密与解密,其中用MD5方式的是不可逆的.   import java.io.UnsupportedEncodingException; import java.net.URLDecoder; import java.security.InvalidKeyException; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; import

(三)学习MVC之密码加密及用户登录

1.密码加密采用SHA256 算法,此类的唯一实现是 SHA256Managed.在Common/Text.cs里添加Sha256方法: public static string Sha256(string plainText) { SHA256Managed _sha256 = new SHA256Managed(); byte[] _cipherText = _sha256.ComputeHash(Encoding.Default.GetBytes(plainText)); return C

Python Show-Me-the-Code 第 0021题 密码加密

第 0021 题: 通常,登陆某个网站或者 APP,需要使用用户名和密码.密码是如何加密后存储起来的呢?请使用 Python 对密码加密. 阅读资料 用户密码的存储与 Python 示例 阅读资料 Hashing Strings with Python 阅读资料 Python's safest method to store and retrieve passwords from a database 思路: 加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又

C#三层架构(获取中文拼音和给密码加密)

在学习三层架构时,我们在需要获取中文字所获取的拼音,需要引进一个ChnCharInfo.dll的程序文件,并且引用命名空间 using Microsoft.International.Converters.PinYinConverter; 接下来是如何实现拼音的获取: 1 public static string GetPinyins(string name) 2 { 3 //进行拼接字符串 4 StringBuilder sb = new StringBuilder(); 5 //由于Chin

转 C#:使用MD5对用户密码加密与解密

C#中常涉及到对用户密码的加密于解密的算法,其中使用MD5加密是最常见的的实现方式.本文总结了通用的算法并结合了自己的一点小经验,分享给大家. 一.使用16位.32位.64位MD5方法对用户名加密 1)16位的MD5加密 /// <summary> /// 16位MD5加密 /// </summary> /// <param name="password"></param> /// <returns></returns&