android基于口令加密快速搞懂(一)
import java.util.Random;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.PBEKeySpec;
import javax.crypto.spec.PBEParameterSpec;
public class Token {
/*
* 基于口令加密创建步骤
* 1、读取口令
* 将需加密字符串转化为字符数组
* 将口令保存至PBEKeySpec对象中
* 2、由口令生成秘钥
* 通过SecretKeyfactory工厂类的getInstance静态方法获取SecretKeyFactory对象;
* getInstance方法需要一个参数--指定口令加密算法{
* 1、PBEWithMD5AndDES
* 2、PBEWithHmacSHA1AndDESede}
* 通过SecretKeyFactory工厂类的generateSecret()方法生成秘钥
* 3、生成随机数(盐)
* 盐必须是8个元素的字节数组
* 通过Random类的nextbyte方法生成随机数并将随机数赋值给byte数组,参数为byte数组
* 4、创建并初始化密码器
* 通过getInstance方法获取密码器对象,参数为基于口令的加密算法
* 通过PBEParameterSpec类构造器向Cipher对象指定基于口令加密的算法(包括提高破解难度的盐)
* 5、获取明文,进行加密
* 执行密码器的doFinal()方法进行加密,加密结果保存在字节数组ctext中
* */
//口令加密操作方法
public byte[] cmdEncryptionOperation(String encryptionStr,String pwdStr) throws Exception
{
//读取口令
//将口令转化为字符数组
char[] pwd = pwdStr.toCharArray();
//将加密数组存储至PBEKeySpec对象
PBEKeySpec pbeKeySpec = new PBEKeySpec(pwd);
//由口令生成秘钥
//通过SecretKeyFactory的getinstance方法创建SecretKeyFactory对象,构造参数为加密类型
SecretKeyFactory secretKeyFactory = SecretKeyFactory
.getInstance("PBEWithMD5AndDES");//抛出没找到关键字异常
//通过generateSecret生成口令
SecretKey key = secretKeyFactory.generateSecret(pbeKeySpec);
//生成随机数(盐)
// 创建是8个元素的字节数组的盐
byte[] salt = new byte[8];
//通过Random类的nextbyte方法生成随机数并将随机数赋值给byte数组,参数为byte数组
Random random = new Random();
random.nextBytes(salt);
//创建并初始化密码器
Cipher cipher = Cipher.getInstance("PBEWithMD5AndDES");
PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, 1000);
cipher.init(Cipher.ENCRYPT_MODE, key,parameterSpec);
//获取明文,进行加密
byte[] ptext = encryptionStr.getBytes("UTF-8");
byte[] ctext = cipher.doFinal(ptext);//cipher的dofinal方法进行加密
return ctext;
}
}
使用加密方法:
public static void main(String[] args) throws Exception {
Token token = new Token();
byte[] ctext = token.cmdEncryptionOperation("加QQ群 499092562交流!!","2016/4/5");
FileOutputStream os = new FileOutputStream("PBEEnc.dat");
os.write(ctext);
for (int i = 0; i < ctext.length; i++) {
System.out.print(ctext[i]);
}
}
android基于口令加密快速搞懂(一)的更多相关文章
- 一文教你快速搞懂速度曲线规划之S形曲线(超详细+图文+推导+附件代码)
本文介绍了运动控制终的S曲线,通过matlab和C语言实现并进行仿真:本文篇幅较长,请自备茶水: 请帮忙点个赞
- 一文带你快速搞懂动态字符串SDS,面试不再懵逼
目录 redis源码分析系列文章 前言 API使用 embstr和raw的区别 SDSHdr的定义 SDS具体逻辑图 SDS的优势 更快速的获取字符串长度 数据安全,不会截断 SDS关键代码分析 获取 ...
- 一文教你快速搞懂速度曲线规划之T形曲线(超详细+图文+推导+附件代码)
运动控制中常用的T速度曲线规划的原理和程序实现,最后给出了测试结果: 如果本文帮到了您,请帮忙点个赞
- 一篇文章快速搞懂Qt文件读写操作
导读:Qt当中使用QFile类对文件进行读写操作,对文本文件也可以与QTextStream一起使用,这样读写操作会更加简便.QFileInfo可以用来获取文件的信息.QDir可以用于对文件夹进行操作. ...
- 快速搞懂.NET 5/.NET Core应用程序的发布部署
.NET Framework时代,.NET 应用程序大多直接部署运行在Windows服务器上,当然也可以通过Mono部署运行在Linux上.无论部署exe,还是IIS站点.或是Windows Serv ...
- 一篇文章快速搞懂 Apache SkyWalking 的 OAL
OAL简介 在流模式(Streaming mode)下,SkyWalking 提供了 观测分析语言(Observability Analysis Language,OAL) 来分析流入的数据. OAL ...
- [转]快速搞懂Gson的用法
原文地址:http://coladesign.cn/fast-understand-the-usage-of-gson/ 谷歌gson这个Java类库可以把Java对象转换成JSON,也可以把JSON ...
- 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)
这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...
- 一篇文章快速搞懂Redis的慢查询分析
什么是慢查询? 慢查询,顾名思义就是比较慢的查询,但是究竟是哪里慢呢?首先,我们了解一下Redis命令执行的整个过程: 发送命令 命令排队 命令执行 返回结果 在慢查询的定义中,统计比较慢的时间段指的 ...
随机推荐
- ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus
ASP.NET Linux部署(2) - MS Owin + WebApi + Mono + Jexus 本文承接我的上一篇博文: ASP.NET 5 Linux部署,那篇文章主要是针对最新的ASP. ...
- height:100% 布局
常常会碰到需要填满整个浏览器,并且自适应高度的需求.首先肯定会想到给容器设定height:100%,但是会没有效果.原因是body没有高度,所以百分比无法生效. 解决方案:给html,body,标签都 ...
- Java的异步HttpClient
上篇提到了高性能处理的关键是异步,而我们当中许多人依旧在使用同步模式的HttpClient访问第三方Web资源,我认为原因之一是:异步的HttpClient诞生较晚,许多人不知道:另外也可能是大多数W ...
- [异常解决] ubuntukylin16.04 LTS中关于flash安装和使用不了的问题解决
http://www.linuxdiyf.com/linux/25211.html 归纳解决flash插件大法: 启动器中找到 软件更新,启动,点击 其它软件,把Canonical合作伙伴前方框 选上 ...
- BoneCP 升级遇到的问题
Caused by: org.springframework.beans.BeanInstantiationException: Could not instantiate bean class [c ...
- backup1:开始数据库备份
数据库备份分为数据文件备份和日志文件备份,数据文件的备份分为:完整备份和差异备份.在SQL Server 2012中,能够将数据分布式备份到不同的存储设备上,一般情况,只将数据备份到一个备份文件(.b ...
- MVC 验证码实现( 简易版)
现在网站上越来越多的验证码,使用场景也是越来越多,登陆.注册.上传.下载...等等地方,都有可能大量使用到验证码,那么制作验证码到底有多简单呢?我们一起来看下最简易版的验证码实现过程- 验证码的基本步 ...
- ASP.NET(IIS)出现"没有为请求类型"GET"找到 HTTP 处理程序"
pasting 环 境:windows 2003 IIS6.0 程序支持:ASP.NET .NET版本:2.0.4.0 问 题:之前服务器上各大网站运行良好,今天突然出现:" ...
- 3、C#核心编程结构下
本学习主要参考Andrew Troelsen的C#与.NET4高级程序设计,这小节主要述说以下几个东西: 这一小节是上一小节的补充,主要涉及到一下的知识细节: 1.C#方法的各种细节 2.探讨out ...
- JVM学习(1)——通过实例总结Java虚拟机的运行机制
俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及到的知识点总结如下: JVM的历史 JVM的运行流程简介 JVM的组成(基于 Java 7) JVM调优参数:-Xmx和-Xms ...