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基于口令加密快速搞懂(一)的更多相关文章

  1. 一文教你快速搞懂速度曲线规划之S形曲线(超详细+图文+推导+附件代码)

    本文介绍了运动控制终的S曲线,通过matlab和C语言实现并进行仿真:本文篇幅较长,请自备茶水: 请帮忙点个赞

  2. 一文带你快速搞懂动态字符串SDS,面试不再懵逼

    目录 redis源码分析系列文章 前言 API使用 embstr和raw的区别 SDSHdr的定义 SDS具体逻辑图 SDS的优势 更快速的获取字符串长度 数据安全,不会截断 SDS关键代码分析 获取 ...

  3. 一文教你快速搞懂速度曲线规划之T形曲线(超详细+图文+推导+附件代码)

    运动控制中常用的T速度曲线规划的原理和程序实现,最后给出了测试结果: 如果本文帮到了您,请帮忙点个赞

  4. 一篇文章快速搞懂Qt文件读写操作

    导读:Qt当中使用QFile类对文件进行读写操作,对文本文件也可以与QTextStream一起使用,这样读写操作会更加简便.QFileInfo可以用来获取文件的信息.QDir可以用于对文件夹进行操作. ...

  5. 快速搞懂.NET 5/.NET Core应用程序的发布部署

    .NET Framework时代,.NET 应用程序大多直接部署运行在Windows服务器上,当然也可以通过Mono部署运行在Linux上.无论部署exe,还是IIS站点.或是Windows Serv ...

  6. 一篇文章快速搞懂 Apache SkyWalking 的 OAL

    OAL简介 在流模式(Streaming mode)下,SkyWalking 提供了 观测分析语言(Observability Analysis Language,OAL) 来分析流入的数据. OAL ...

  7. [转]快速搞懂Gson的用法

    原文地址:http://coladesign.cn/fast-understand-the-usage-of-gson/ 谷歌gson这个Java类库可以把Java对象转换成JSON,也可以把JSON ...

  8. 一文快速搞懂MySQL InnoDB事务ACID实现原理(转)

    这一篇主要讲一下 InnoDB 中的事务到底是如何实现 ACID 的: 原子性(atomicity) 一致性(consistency) 隔离性(isolation) 持久性(durability) 隔 ...

  9. 一篇文章快速搞懂Redis的慢查询分析

    什么是慢查询? 慢查询,顾名思义就是比较慢的查询,但是究竟是哪里慢呢?首先,我们了解一下Redis命令执行的整个过程: 发送命令 命令排队 命令执行 返回结果 在慢查询的定义中,统计比较慢的时间段指的 ...

随机推荐

  1. 字符型图片验证码识别完整过程及Python实现

    字符型图片验证码识别完整过程及Python实现 1   摘要 验证码是目前互联网上非常常见也是非常重要的一个事物,充当着很多系统的 防火墙 功能,但是随时OCR技术的发展,验证码暴露出来的安全问题也越 ...

  2. 浅谈SOA

    概念 wiki对于SOA定义如下: A service-oriented architecture (SOA) is a design pattern in which application com ...

  3. windows phone如何才能在中国翻身?

    最近的新闻告诉我们,Android和IOS的系统继续保持市场领先,并且Android的市场份额达到了历史最高点. 做为windows phone的消费者,作为微软粉丝,我感到十分的不爽. 前几天MIU ...

  4. 最大子段和(c++)

    // 最大子段和.cpp : 定义控制台应用程序的入口点. // #include "stdafx.h" #include<iostream> using namesp ...

  5. xamarin优化listView.ScrollTo

    在xamarinz中关于listview的滚动,我这里有点小优化,我做了一个类似QQ的聊天页面,上面是一个listview,下面时一个editText,当在手机上使用时,发现在android平台下,如 ...

  6. RangePartitioner 实现简记

    摘要: 1.背景 2.rangeBounds 上边界数组源码走读 3.RangePartitioner的sketch 源码走读 4.determineBounds 源码走读 5.关于RangePart ...

  7. ★Kali信息收集~★6.Dmitry:汇总收集

    概述: DMitry(Deepmagic Information Gathering Tool)是一个一体化的信息收集工具.它可以用来收集以下信息: 1. 端口扫描 2. whois主机IP和域名信息 ...

  8. 构建ASP.NET MVC4+EF5+EasyUI+Unity2.x注入的后台管理系统(12)-系统日志和异常的处理②

    系列目录 上一讲我们做了日志与异常的结果显示列表,这一节我们讲要把他应用系统中来. 首先我们在App.Common类库中创建一个通用类ResultHelper,这个类里面写了,获取一个GUID,获取当 ...

  9. .NET Core RC2发布在即,我们试着用记事本编写一个ASP.NET Core RC2 MVC程序

    在.NET Core 1.0.0 RC2即将正式发布之际,我也应应景,针对RC2 Preview版本编写一个史上最简单的MVC应用.由于VS 2015目前尚不支持,VS Code的智能感知尚欠火候,所 ...

  10. ITTC数据挖掘系统(六)批量任务,数据查看器和自由文档

    这一次带来了一系列新特新,同时我们将会从商业智能的角度讨论软件的需求 一. 批量任务向导 一个常用的需求是完成处理多个任务,可能是同一个需求以不同的参数完成多次,这类似批量分析某一问题:或者是不同的需 ...