快速搞懂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口令加密的相关介绍,希望对大家有所帮助!

时间: 2024-08-01 10:43:12

快速搞懂Android口令加密(一)的相关文章

快速搞懂Android口令加密(一)_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 { /* * 基于口令

一篇文章彻底搞懂Android事件分发机制

本文讲的是一篇文章彻底搞懂Android事件分发机制,在android开发中会经常遇到滑动冲突(比如ScrollView或是SliddingMenu与ListView的嵌套)的问题,需要我们深入的了解android事件响应机制才能解决,事件响应机制已经是android开发者必不可少的知识.面试找工作的时候也是面试官经常会问的一个问题. 涉及到事件响应的常用方法构成 用户在手指与屏幕接触过程中通过MotionEvent对象产生一系列事件,它有四种状态: MotionEvent.ACTION_DOW

快速搞懂ASP.NET MVC

有一只企鹅首先发现地球暖化.冰山在融化,回来告诉其它企鹅,却没有任 一只企鹅愿意相信:因为企鹅们觉得现在生活过得很好,都不想费心思考如何改 变.改变何时会来临,因此仍每天做例行性的工作,不愿去研究别人的观点.「 有时人们会抗拒改变,其实只是不想改变:但是愿意接收新观念的技术人员,通 常会活得比较久」.本帖只提供 MVC Pattern 的观念和架构介绍,仅供未接触 过 MVC Framework 的 .NET 技术人员作为参考之用,以评估是否要深入学习或 在将来的项目导入. 常在网络上,看到有网

一篇文章看懂Android学习最佳路线

前言 看到一篇文章中提到"最近几年国内的初级Android程序员已经很多了,但是中高级的Android技术人才仍然稀缺",这的确不假,从我在百度所进行的一些面试来看,找一个适合的高级Android工程师的确不容易,一般需要进行大量的面试才能挑选出一个比较满意的.为什么中高级Android程序员不多呢?这是一个问题,我不好回答,但是我想写一篇文章来描述下Android的学习路线,期望可以帮助更多的Android程序员提升自己.由于我也是从一个菜鸟过来的,所以我会结合我的个人经历以及我对A

如何在两小时内搞懂PHOTOSHOP基础工具?

  初学者面对Photoshop这个庞然大物,第一直观感受是不知道从何下手.那么多工具,学完这个忘那个,有木有什么教程可以一次性学完呢?今天这篇好文,只要童鞋们打起精神来,两个小时就可以搞懂基础的工具使用!绝对是新手速成Photoshop的一个好机会!赶紧来学习! 教程很有意思,从A--Z 依次讲解每个工具的使用,精辟彻底,不拖泥带水呦. 3D面板:作为Adobe Photoshop Extended的一部分,你可以在Adobe Photoshop CC中找到它.3D面板中展示了所有3D文件中允

搞懂.NET Framework 历史版本(2017年)

原文:搞懂.NET Framework 历史版本(2017年) 最近被.NET平台各种名词.以及各种版本弄得有些疑惑,开发和部署,对于开发平台版本选择是个基本问题,因此,花了些时间,学习汇总了有关.NET版本演进的历史. .NET简介 这个平台相信我们都知道,不过随着技术发展,现在的.NET平台也今非昔比. .NET平台类似Java平台,是微软于2000年推出的Windows操作系统的应用软件开发框架,发展至今形成巨大的技术栈,涉及多语言(支持C#.F#.VB.NET)多领域(Windows桌面

每个Java初学者都应该搞懂的六个问题

初学|问题 对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列.内容均来自于CSDN的经典老贴. 问题一:我声明了什么! String s = "Hello world!"; 许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是"Hello world!".这样模糊的回答通常是概念不清的根源.如果要准确的回答,一半的人

每个初学者都应该搞懂的问题!

初学|问题 对于这个系列里的问题,每个学Java的人都应该搞懂.当然,如果只是学Java玩玩就无所谓了.如果你认为自己已经超越初学者了,却不很懂这些问题,请将你自己重归初学者行列.内容均来自于CSDN的经典老贴.问题一:我声明了什么!String s = "Hello world!";许多人都做过这样的事情,但是,我们到底声明了什么?回答通常是:一个String,内容是"Hello world!".这样模糊的回答通常是概念不清的根源.如果要准确的回答,一半的人大概会

经典算法(6) 快速排序 快速搞定

快速排序由于排序效率在同为O(N*logN)的几种排序方法中效率较高,因此经常被采用,再加上快速排序 思想----分治法也确实实用,因此很多软件公司的笔试面试,包括像腾讯,微软等知名IT公司都喜欢考这个 ,还有大大小的程序方面的考试如软考,考研中也常常出现快速排序的身影. 总的说来,要直接默写 出快速排序还是有一定难度的,因为本人就自己的理解对快速排序作了下白话解释,希望对大家理解有帮助 ,达到快速排序,快速搞定. 快速排序是C.R.A.Hoare于1962年提出的一种划分交换排序.它采用了 一