- 博客(188)
- 资源 (12)
- 收藏
- 关注
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 伪随机数的产生和流密码
能够应用到大量密码函数的一种功能是随机或伪随机数的产生。对这个功能的要求是产生的数据流必须不能预测。流密码是对称密码算法,从明文输入流逐位或逐字节产生密文输出。使用最为广泛的此类密码是RC4。一个重要的密码函数是具有强密码学意义的伪随机数发生器。伪随机数发生器(PRNG)在许多密码和安全应用中有使用。伪随机数发生器(PRNG)真随机数发生器(TRNG)在网络安全的各种应用里,随机数在加密算法中扮演...
2018-06-11 10:21:43
9236
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 密码学之数论基础
素数整数p>1是素数当且仅当它只有因子+(-)1和+(-)p。 任意整数a>1都可以唯一地因子分解为: 其中p1,p2,…,pt均是素数,p1<p2<…<pt,且所有的ai都是正整数。这就是算术基本定理。设P是所有素数的集合,则任意正整数a可唯一地表示为: 上式右边是所有素数之积。对某一整数a,其大多数指数ap为0.两数相乘即是指数对应相加。设,定义k=ab。我们...
2018-05-04 10:19:00
4710
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 密码学中的一些数学基础
声明:本篇博文的内容摘自于《密码编码学与网络安全》这本书。群、环和域都是数学理论中的一个分支,即抽象代数或称为近世代数的基本元素。在抽象代数中,我们关心的是其元素能进行代数运算的集合,也就是说,我们可以通过很多种方法,使集合上的两个元素组合得到集合中的第三个元素。这些运算方法都遵守特殊的规则,而这些规则又能确定集合的性质。根据约定,集合上元素的两种主要运算符号与普通数字的加法和乘法所使用的符号...
2018-04-10 19:26:35
18583
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 DES算法原理与Java实现
在上一篇的文章中介绍了Feistel密码的原理与Java实现,这篇将带来DES算法的原理与Java实现,对于Java实现这里只给出一份代码(还有其他方式实现,主要是处理二进制位的方式不一样)。概述DES是一个分组加密算法,它以64位为分组对数据加密。同时DES也是一个对称算法:加密和解密用的是同一个算法。DES是一个包含16个阶段的“替换–置换”的分组加密算法,64位的分组明文序列作为...
2018-03-22 15:34:35
20051
8
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Feistel密码原理与实现
Feistel概述Feistel密码结构,在密码学研究中,Feistel密码结构是用于分组密码中的一种对称结构。理解了Feistel密码结构,对于理解DES算法的原理有很大的帮助。 Feistel建议使用乘积密码的概念来逼近理想分组密码。乘积密码是指依次使用两个或两个以上基本密码,所得结果的密码强度将强于所有单个密码的强度。Feistel密码交替使用代替和置换来进行加密解密。 代替和置换的...
2018-02-27 16:56:39
23143
6
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 揭开分组密码的面纱
前面的几篇博文简单地介绍了传统加密的知识,大家应该已经了解了常见的传统加密方案以及代码实现。这篇文章主要来介绍密码学中的分组密码的工作模式以及填充模式,这篇文章没有相关的代码,都是一些简单的理论。这里说一下为什么是先介绍分组密码,这是因为分组密码的理论是DES,3DES,AES加密的基础理论之一,而且和加密解密算法的跨平台性有一定的关联。分组密码分组密码是将一个明文分组作为整体加密并且...
2018-02-21 21:40:38
4282
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 传统加密技术续-Hill Vigenere Vernam
在上篇文章中,讲述了一些加密解密的概念以及Caesar、单表替换密码、Playfair密码。在这篇文章中主要涉及Hill密码,Vigenere密码,Vernam密码,置换技术。Hill密码希尔密码(Hill Cipher)是运用基本矩阵论原理的替换密码,由Lester S.Hill在1929年发明。该加密算法将m个连续的明文字母替换成m个密文字母,这是由m个线性等式决定的,在等式里每个...
2018-02-07 22:41:45
1014
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 传统加密技术
最近由于工作需要,转而去研究加密与解密的东西,这个密码学的东西还是比较复杂的,还需要补一下数学知识。我会持续分享这方面的内容,由于初步涉及有可能总结的东西会有错误或逻辑漏洞,如果发生请及时告知和一起讨论。需要说明的是,这些都是学习笔记与感悟,和业务方案没有任何关系,并不会涉及泄露,故才会拿出分享。在之前的加密解密的初涉文章中,我们讲到了加密算法的分类:对称加密,非对称加密,Hash算法。那么什...
2018-02-07 22:40:47
7058
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 对于加密解密的初步了解
由于工作任务的分配,最近把之前丢下的加密与解密的内容捡了起来,本篇博文不会涉及加密算法的原理以及具体实现,有时间会深究其原理,这篇博文主要是对加密算法的概括以及Java中常用加密算法的使用。加密算法可以大致分为3类:对称加密算法、非对称加密算法、哈希算法。对称加密算法:加密和解密使用相同密钥的算法,常见算法:DES、3DES、AES等。非对称加密算法:使用一对公私钥来进行加密解密的算法,一般公钥加密
2017-12-06 09:30:44
897
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java集合之ArrayList源码解析
ArrayList是我们在开发中经常使用的一个集合,继续按照以前的风格来解析源码(JDK1.7)。 ArrayList简要概括: 1.ArrayList的底层数据结构是一个数组,确切地说是一个动态数组,每次扩容的时候,都会重新创建一个数组并赋值给成员变量elementData,其容量的扩展方式为:newCapacity = oldCapacity + (oldCapacity >> 1); 2
2017-11-29 11:02:19
484
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java集合之ConcurrentHashMap源码浅析
上文中结尾处,我们说到了现在很少用Hashtable,那么在需要线程安全的场景中,我们如何保持同步呢,这就是本文的重点:ConcurrentHashMap(JDK1.7)。ConcurrentHashMap比HashMap以及Hashtable复杂多了,其内部采用了锁分段技术用以提高并发存取效率。我们看一下测试代码: 代码清单1:import java.util.HashMap;import j
2017-11-25 14:13:25
447
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java集合之Hashtable源码解析
在进行Hashtable源码解析之前,我先扔出Hashtable与HashMap有哪些区别? 1.关于null,HashMap允许key和value都可以为null,而Hashtable则不接受key为null或value为null的键值对。 2.关于线程安全,HashMap是线程不安全的,Hashtable是线程安全的,因为Hashtable的许多操作函数都用synchronized修饰。3.
2017-11-09 00:10:52
608
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《深入理解Java虚拟机》——方法调用与基于栈的字节码解释执行引擎
方法调用:方法调用并不等同于方法执行,方法调用阶段唯一的任务就是确定被调用方法的版本(即调用哪一个方法),暂时还不涉及方法内部的具体运行过程。其实关于方法的执行,接口(父类)与实现类(子类)这些方法如何调用从Java代码层面上大家都是比较清楚的,这里我们探讨一下更深一层的运行原理。Class文件的编译过程中不包含传统编译中的连接步骤,一切方法调用在Class文件里面存储的都只是符号引用
2017-11-04 20:48:18
581
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《深入理解Java虚拟机》——栈帧结构
这部分的内容是虚拟机字节码执行引擎方面的,大致分为3块:栈帧结构、方法调用、字节码的执行,而本篇主要是针对栈帧结构的总结。在开始栈帧结构之前我们还是先了解一下执行引擎相关的内容:物理机的执行引擎是直接建立在处理器、硬件、指令集和操作系统层面上的。虚拟机的执行引擎则是由自己实现的,因此可以自行指定指令集与执行引擎的结构体系并且能够执行那些不被硬件直接支持的指令集格式。
2017-11-03 16:28:25
1195
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Java集合之HashMap源码解析
Java集合系列的源码解析,分析代码的版本均为:Sun JDK1.7这篇文章fuck的是HashMap,为什么先选择它呢,因为Android开发中最常用的数据集合就是HashMap和ArrayList,这里先Fuck HashMap。通过本篇文章你可以知道下面几点:1.HashMap内部采用的数据结构——>HashMap内部采用的是数组加单链表来实现的,单链表的插入为头插法。(
2017-11-03 15:51:50
664
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《深入理解Java虚拟机》——类加载的时机与过程
在介绍完类的文件结构与字节码指令之后,我们就需要思考一下类文件是怎么被虚拟机加载与解析的?本篇文章将围绕这两点来进行总结。虚拟机把描述类的数据从Class文件加载到内存,并对数据进行校验、转换解析和初始化,最终形成可以被虚拟机直接使用的Java类型,这就是虚拟机的类加载机制。在Java语言里面,类型的加载、连接和初始化过程都是在程序运行期间完成的,这种策略虽然会令类加载时稍微增加一些性能开
2017-10-29 20:50:24
983
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《深入理解Java虚拟机》——字节码指令简介
Java虚拟机的指令由一个字节长度的、代表着某种特定操作含义的数字(称为操作码,Opcode)以及跟随其后的零至多个代表此操作所需参数(称为操作数,Operands)而构成。由于Java虚拟机采用面向操作数栈而不是寄存器的架构,所以大多数的指令都不包含操作数,只有一个操作码。字节码指令集是一种具有鲜明特点、优劣势都很突出的指令集架构,由于限制了Java虚拟机操作码的长度为一个字节(即0
2017-10-29 20:37:09
732
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《深入理解Java虚拟机》——类文件结构
上篇文章主要讲述了类文件结构的魔数与常量池的内容,这篇文章继续阐述类文件结构的剩余内容,主要涉及:访问标志、类索引与父类索引以及接口索引集合、字段表集合、方法表集合、属性表集合。访问标志在类文件结构中常量池之后,紧接着的两个字节代表访问标志(access_flags),这个标志用于识别一些类或者接口层次的访问信息,包括:这个Class是类还是接口;是否定义为public类型;是否定
2017-10-29 19:57:33
433
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《深入理解Java虚拟机》——类文件结构之魔数常量池
相对于Java虚拟机的其他部分,这部分的内容我们只需要搞清楚下面两个方面的内容:1.无关性2.Class文件的结构与组成我们都知道Java有个特性是:一次编写,到处运行。这里体现的是平台无关性,但是对于Java虚拟机来说,不仅仅是具有平台无关性的特点,还具有语言无关性的特性。各种不同平台的虚拟机与所有平台都统一使用的程序存储格式——字节码(ByteCode)是构
2017-10-11 15:41:43
735
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《深入理解Java虚拟机》——垃圾收集器与内存分配策略问题
通过这篇文章你能知道的问题:1.如何判断对象是活着还是死去?2.在Java语言中,可作为GCRoots的对象有哪些?3.Java中引用的分类4.对象的自救姿势是什么?5.类在什么情况下是无用的?6.垃圾收集算法有哪些?7.年轻代,老年代,永久代?8HotSpot虚拟机是如何发生内存回收的?9.垃圾收集器有哪些以及组合方式有哪些
2017-09-28 16:38:57
722
1
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 《深入理解Java虚拟机》——Java内存区域与内存溢出异常学习总结
序言:在Android开发方面,可以说所有的Android开发人员都知道程序计数器,堆,栈,方法区,常量池,GC回收等这些东西,作为一名老菜鸟,有一天我突然问自己,自己真的懂这些吗?真的懂吗?于是就有了《深入理解Java虚拟机》的阅读,这个系列会记录总结这本书的知识。先抛出几个问题,通过该篇文章你可以知道以下问题的答案:java虚拟机执行程序时内存是如何划分的?哪些数据区是线程私有的?
2017-09-21 15:47:04
640
2
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android BLE 总结-源码篇(深入理解startAdvertising的注册过程)
在上一篇的BluetoothLeAdvertiser的分析中讲到,startAdvertising的内部具体实现都是IBluetoothGatt的引用来去实现的,这篇文章我们一起来往深的一层去分析。这篇博文我们会弄清楚上文中以下几点:1.IBluetoothGatt的引用的到底是什么?2. mClientIf是如何生成的以及作用?先来看第一个问题——IBluetoothGa
2017-09-14 17:23:19
6946
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android BLE 总结-源码篇(BluetoothLeAdvertiser)
在做Android BLE的应用程序时,我们发出广播数据是调用BluetoothLeAdvertiser的startAdvertising方法,如下所示:mBluetoothLeAdvertiser.startAdvertising(advertiseSettings, advertiseData, myAdvertiseCallback);那么我打算写的BLE总结之
2017-09-12 19:24:17
8654
5
![](https://csdnimg.cn/release/blogv2/dist/pc/img/listFixedTop.png)
原创 Android BLE的总结-概念篇
Android BLE的总结其实BLE是个通用的技术术语,与平台无关的,即ios和Android以及一些嵌入式系统或单片机都可以有BLE模块。在进行Android BLE相关的应用开发前,我们有必要去了解蓝牙协议的一些知识。蓝牙协议蓝牙协议基础概念蓝牙协议包括两种技术:Basic Rate(简称BR)和Low Energy(简称LE)。这两种技术,都包括搜索管理,连接管理等机制,但它们是不能互通的。
2017-09-11 14:56:07
11371
原创 汉诺塔问题算法
问题汉诺塔(又称河内塔)问题是源于印度一个古老传说的益智玩具。大梵天创造世界的时候做了三根金刚石柱子,在一根柱子上从下往上按照大小顺序摞着64片黄金圆盘。大梵天命令婆罗门把圆盘从下面开始按大小顺序重新摆放在另一根柱子上。并且规定,在小圆盘上不能放大圆盘,在三根柱子之间一次只能移动一个圆盘。递归算法我们这里先列举盘子的个数为1,2,3,4的时候的情况,具体的如下表格。观察上面的四个表...
2019-03-26 00:12:39
5732
原创 Android中用JNI实现与原生代码通信
好久没搞NDK的东西了,第一次学习NDK还是14年的时候,最近又需要使用,所以复习一下。本篇笔记主要记录使用Java原生接口技术实现Java应用程序和原生代码之间通信JNI是Java程序设计语言功能最强的特征,它允许Java类的某些方法原生实现,同时让它们能够像普通Java方法一样被调用和使用。这些原生方法也可以使用Java对象,使用方法与Java代码使用Java对象的方法相同。原生方法可以创建新...
2018-05-26 14:04:47
1428
原创 算法预备军(5)~散列表
散列表又称为Hash表,核心体现在Hash算法上,而Hash算法又是加密算法的一种,所以我们很有必要去了解一下散列表。一些概念我们看一个公式:存储位置=f(关键字),我们将根据这个公式来理解散列技术与散列表的概念。散列技术:散列技术是在记录的存储位置和它的关键字之间建立一个确定的对应关系f,使得每个关键字key对应一个存储位置f(key)。查找时,根据这个确定的对应关系找到给定值key的映射f(ke
2017-11-21 10:13:16
401
转载 BLE协议栈的学习笔记
BLE的协议可分为Bluetooth Application 和Bluetooth Core两大部分,而Bluetooth Core又包含BLE Controller和BLE Host两部分。Physical Layer:任何一个通信系统,首先要确定的就是通信介质(物理通道,Physical Channel),BLE也不例外.在BLE协议中,"通信介质"的定义是由Physica
2017-10-09 22:28:51
4393
转载 C函数之memcpy()函数用法
函数原型void *memcpy(void*dest, const void *src, size_t n);功能由src指向地址为起始地址的连续n个字节的数据复制到以destin指向地址为起始地址的空间内。头文件#include返回值 函数返回一个指向dest的指针。说明 1.sour
2017-09-14 00:47:31
2846
原创 算法预备军(4)~树的概念
树树的基础树的定义定义树(Tree)是n(n>=0)个结点的有限集。n=0时称为空树。在任意一棵非空树中: (1)有且仅有一个特定的 称为根(Root)的结点; (2)当n>1时,其余结点可分为m(m>0)个互不相交的有限集T1,T2,…….,Tn, 其中每一个集合本身又是一棵树,并且称为根的子树(SubTree)。结点分类树的结点包含一个数据元素及若
2017-08-08 10:07:36
650
原创 Android内核学习笔记—Binder分析
进程间通信——Binder概述Binder是Android中使用最广泛的IPC机制。如果统观Binder中的各个组成元素,就会惊奇地发现它和TCP/IP网络有很多相似之处: .Binder驱动——路由器.Service Manager——DNS.Binder Client——客户端.Binder Server——服务器Service Manager在Binder通信过程中的
2017-08-07 23:31:29
2924
转载 python模块以及导入出现ImportError: No module named 'xxx'问题
python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包。只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用如果你要使用的模块(py文件)和当前模块在同一目录,只要import相应的文件名就好,比如在a.py中使用b.py: import b 但是如果要import一个不同目录的文件(例如b.
2017-07-13 09:36:37
15350
1
原创 算法预备军(3)~线性表
说明:算法预备军系列内容均为个人的学习笔记,主要是指数据结构方面的,后面在继续学习的过程中会陆续分享相关内容.数据结构这块主要学习来源为,大家不喜欢摘录的,可以自行看书.线性表:零个或多个数据元素的有限序列.首先它是一个序列.也就是说,元素之间是有顺序的,若元素存在多个,则第一个元素无前驱,最后一个元素无后继,其他每个元素都有且只有一个前驱和后继.然后线性表强调是有限的.事实上
2017-06-14 13:56:10
605
转载 散列表的基本原理与实现
散列表的基本原理与实现本篇博文主要介绍散列表(Hash Table)这一常见数据结构的原理与实现。由于个人水平有限,文章中难免存在不准确或是不清晰的地方,希望大家可以指正:)一、概述 符号表是一种用于存储键值对(key-value pair)的数据结构,我们平常经常使用的数组也可以看做是一个特殊的符号表,数组中的“键”即为数组索引,值为相应的数组元素。也就
2017-05-01 21:27:35
662
原创 算法预备军(2)~算法的一些概念
说明:算法预备军系列内容均为个人的学习笔记,主要是指数据结构方面的,后面在继续学习的过程中会陆续分享相关内容.数据结构这块主要学习来源为,大家不喜欢摘录的,可以自行看书.算法:算法是解决特定问题求解步骤的描述,在计算机中表现为指令的有限序列,并且每条指令表示一个或多个操作。算法定义中,提到了指令,指令能被人或机器等计算装置执行。它可以是计算机指令,也可以是我们平时的语言文字。为
2017-04-30 15:18:36
589
原创 算法预备军(1)~数据结构绪论
说明:算法预备军系列内容均为个人的学习笔记,主要是指数据结构方面的,后面在继续学习的过程中会陆续分享相关内容.数据结构这块主要学习来源为,大家不喜欢摘录的,可以自行看书.数据结构:是相互之间存在一种或多种特定关系的数据元素的集合程序设计=数据结构+算法数据:是描述客观事物的符号,是计算机中可以操作的对象,是能被计算机识别,并输入给计算机处理的符号集合。数据不仅仅包括整型,实型等数值类型
2017-04-30 15:15:56
437
转载 MVP 模式简单易懂的介绍方式
之前也看过几篇介绍mvp的文章,但是都没有此篇易懂。Android MVP 模式 [1] 也不是什么新鲜的东西了,我在自己的项目里也普遍地使用了这个设计模式。当项目越来越庞大、复杂,参与的研发人员越来越多的时候,MVP 模式 的优势就充分显示出来了。MVP 模式是 MVC 模式在 Android 上的一种变体,要介绍 MVP 就得先介绍 MVC。在 MVC 模式中,Ac
2017-02-24 14:47:54
613
转载 Dagger2从入门到放弃再到恍然大悟
原文出处:http://www.jianshu.com/p/39d1df6c877d现在Dagger2在项目里用的越来越多了,最近花了些时间学习了一下Dagger2,这篇文章主要帮助理解Dagger2的注入实现过程,如有错误,还请指正!什么是Dagger2Dagger2是Dagger的升级版,是一个依赖注入框架,现在由Google接手维护。 恩,这里有个关键字依赖注入,因此
2017-02-24 14:39:39
454
原创 使用adb抓取进程的hprof
(1)adb shell ps 来查看所有进程的pid (2)adb shell am dump 抓取指定pid的hprof文件,这里的output-file-name的路径是手机或手表存储的路径
2016-09-28 15:09:27
5801
1
原创 E: 无法获得锁 /var/lib/dpkg/lock - open (11: 资源暂时不可用) E: 无法锁定管理目录(/var/lib/dpkg/),是否有其他进程正占用它?
安装wine的步骤如下1.添加PPAsudo add-apt-repository ppa:ubuntu-wine/ppa2.更新列表sudo apt-get update3.安装Winesudo apt-get install wine1.7 winetricksE: 无法获得锁 /var/lib/dpkg/lock - o
2016-08-10 06:52:35
3291
Android轮播控件
2015-12-18
ServiceDemo
2015-05-03
NDKHelloWorld
2015-04-06
Android进程Demo
2014-12-10
ViewFlipperDemo
2014-11-06
Android首页轮播效果Demo
2014-10-25
成绩管理系统
2012-06-21
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人