
算法
xiaoliuliu2050
这个作者很懒,什么都没留下…
展开
-
非对称数字签名算法 :RSA 秘钥长度
本文介绍RSA加解密中必须考虑到的密钥长度、明文长度和密文长度问题,对第一次接触RSA的开发人员来说,RSA算是比较复杂的算法,天缘以后还会补充几篇RSA基础知识专题文章,用最简单最通俗的语言描述RSA,让各位了解RSA算法本身其实也很简单,RSA的复杂度是因为数学家把效率和安全也考虑进去的缘故。本文先只谈密钥长度、明文长度和密文长度的概念知识,RSA的理论及示例等以后再谈。提到密钥,我们不得...原创 2019-10-15 16:54:30 · 8130 阅读 · 0 评论 -
加解密算法 之base64 原理
什么是base64:base64是一种常见的用于传输8Bit字节码的编码方式,是一种基于64个可打印字符来表示二进制数据的方法。base64所用的字符为A到Z、a到z、0到9、+号符和/号符,他的索引(下标)从0开始,具体如下转换对照所示:base64加密方法:1、 首先将需要加密的明文的每个字符依次翻译为二进制的ASII码,取八位(不足八位前面填充0补充)2 、然后将1中所...原创 2019-10-15 17:04:21 · 1907 阅读 · 0 评论 -
java 数据结构之集合类概述
Java集合类简介:Java集合大致可以分为Set、List、Queue和Map四种体系,其中Set代表无序、不可重复的集合;List代表有序、重复的集合;而Map则代表具有映射关系的集合,Java 5 又增加了Queue体系集合,代表一种队列集合实现。Java集合就像一种容器,可以把多个对象(实际上是对象的引用,但习惯上都称对象)“丢进”该容器中。从Java 5 增加了泛型以后,Java集...转载 2019-01-02 16:04:22 · 269 阅读 · 0 评论 -
非对称加密算法ECC以及ECDSA签名 及java 实现
一、ECC加密解密【暂时无意义】 椭圆加密算法(ECC)是一种公钥加密体制,最初由Koblitz和Miller两人于1985年提出,其数学基础是利用椭圆曲线上的有理点构成Abel加法群上椭圆离散对数的计算困难性。 是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。在软件注册保护方面起到很大的作用,一般的序列号通常由该算法产生。 ECC算法在jdk1.5后加入支持,目前...转载 2018-07-23 16:22:26 · 6291 阅读 · 0 评论 -
非对称算法 ECC :java 加解密实现
ECC ECC-Elliptic Curves Cryptography,椭圆曲线密码编码学,是目前已知的公钥体制中,对每比特所提供加密强度最高的一种体制。在软件注册保护方面起到很大的作用,一般的序列号通常由该算法产生。 当我开始整理《Java加密技术(二)》的时候,我就已经在开始研究ECC了,但是关于Java实现ECC算法的资料实在是太少了,无论是国内还是国外的资料,无论是官方还是非...转载 2018-07-23 16:26:41 · 7928 阅读 · 4 评论 -
非对称加密算法--DH
11.1、非对称加密算法特点:发送方和接收方均有一个密钥对(公钥+私钥),其中公钥传播,私钥自己保存,不需要传播 私钥不需要传播的特性解决了对称加密算法中密钥传播的困难(这个困难一般通过线下传递可以解决) 加密安全性极高,只用于一些电子商务网站,加解密速度远低于对称加密 一般情况下,为了解决非对称加密算法加解密速度低的问题,采用非对称加密(使用公钥+私钥对对称加密的密钥进行加解密)+...转载 2018-07-23 16:32:07 · 415 阅读 · 0 评论 -
非对称加密算法 JAVA实现 :DH
【密钥交换(DH)】双方在没有确定共同密钥的情况下,生成密钥,不提供加密工作,加解密还需要其他对称加密算法实现DH算法示例import javax.crypto.KeyAgreement;import javax.crypto.interfaces.DHPrivateKey;import javax.crypto.interfaces.DHPublicKey;import ja...转载 2018-07-23 16:40:27 · 333 阅读 · 0 评论 -
加解密算法总结
https 用到的证书生成逻辑总结:(1)信息 + HASH = 摘要 摘要 + 私钥 = 数字签名(给收方做对比用的,验证收发内容是否一致)(2)公钥 + 相关信息 + CA私钥 = 数字证书(验证发送者是否正确,是可信任的公钥) 加解密算法总结:(1)、对称加密算法常用的算法包括:DES(Data Encryption Standard):数据加密标准,速度较快...转载 2018-07-23 16:53:00 · 4478 阅读 · 0 评论 -
非对称算法 ECC(椭圆曲线的离散对数问题)原理的认识
公开密钥算法总是要基于一个数学上的难题。比如RSA 依据的是:给定两个素数p、q 很容易相乘得到n,而对n进行因式分解却相对困难。RSA 算法原理具体如下: 找出两个“很大”的质数:P & Q N = P * Q M = (P – 1) * (Q – 1) 找出整数E,E与M互质,即除了1之外,没有其他公约数 找出整数D,使得 ED 除以 M 余 1,即 ...转载 2018-07-23 16:12:59 · 6058 阅读 · 0 评论 -
非对称数字签名算法 :RSA
签名具有的特性:安全性 抗否认性 数字签名:带有密钥(公钥、私钥)的消息摘要算法(使用私钥进行签名,使用公钥进行验证) 数字签名算法:RSA、DSA、ECDSA数字签名特性:验证数据完整性 认证数据来源 抗否认性 经典算法MD、SHA两类 数字签名算法-RSA的执行过程 ...转载 2018-07-23 15:49:25 · 458 阅读 · 0 评论 -
非对称加密算法 :RSA java实现
import org.apache.commons.codec.binary.Base64;import java.security.*;import java.security.spec.PKCS8EncodedKeySpec;import java.security.spec.X509EncodedKeySpec;import java.util.HashMap;import ja...转载 2018-07-23 15:37:31 · 371 阅读 · 0 评论 -
数字签名算法(非对称加密)DSA
一、概述1、DSA是以RSA为基础形成的2、java6提供了DSA的实现,但是java6只提供了SHA1withDSA的实现3、bouncycastle扩展提供了其他的DSA实现方式4、遵循“私钥签名,公钥验证”的原则二、模型分析这个和RSA一样,只是换了一个算法而已 三、代码分析 package com.ca.test; import java.se...转载 2018-07-23 15:20:56 · 958 阅读 · 0 评论 -
非对称加密算法概要 :RSA
加密概要加密技术是对信息进行编码和解码的技术,编码是把原来可读信息(又称明文)译成代码形式(又称密文),其逆过程就是解码(解密),加密技术的要点是加密算法,加密算法可以分为三类: 1. 对称加密 2. 非对称加密 3. 不可逆加密对称加密算法加密过程: 将明文分成N个组,然后对各个组进行加密,形成各自的密文,最后把所有的分组密文进行合并,形成最终的密文。 优点: 算...转载 2018-07-23 15:00:48 · 231 阅读 · 0 评论 -
接口设计如何保证数据安全1
1 我们提供接口,对接不同的客户端,但是客户端固定有几个,所以我们的接口需要验证客户端来源如何验证来源 ?要求客户端 生成 公私钥对,把公钥发送给我们。客户端请求我们接口 的数据:con:原始内容content:AES(con)signature: 私钥签名(md5(content)){source_id:content:signature:}...原创 2017-09-26 11:28:26 · 1796 阅读 · 0 评论 -
希尔排序
1、基本思想:希尔排序也成为“缩小增量排序”,其基本原理是,现将待排序的数组元素分成多个子序列,使得每个子序列的元素个数相对较少,然后对各个子序列分别进行直接插入排序,待整个待排序列“基本有序”后,最后在对所有元素进行一次直接插入排序。因此,我们要采用跳跃分割的策略:将相距某个“增量”的记录组成一个子序列,这样才能保证在子序列内分别进行直接插入排序后得到的结果是基本有序而不是局部有序。希尔转载 2017-06-28 15:45:48 · 225 阅读 · 0 评论 -
插入排序
1、基本思想:每步将一个待排序的记录,按其顺序码大小插入到前面已经排序的字序列的合适位置(从后向前找到合适位置后),直到全部插入排序完为止。 2、实例 3、算法实现 /** * 插入排序 * * 从第一个元素开始,该元素可以认为已经被排序 * 取出下一个元素,在已经排序的元素序列中从后向前扫描转载 2017-06-28 15:00:15 · 241 阅读 · 0 评论 -
java 数据结构 collection之 removeif 方法使用-- Predicate
在JDK1.8中,Collection以及其子类新加入了removeIf方法,作用是按照一定规则过滤集合中的元素。这里给读者展示removeIf的用法。 首先设想一个场景,你是公司某个岗位的HR,收到了大量的简历,为了节约时间,现需按照一点规则过滤一下这些简历。比如这个岗位是低端岗位,只招30岁以下的求职者。//求职者的实体类public class Person { privat...转载 2019-01-03 15:44:55 · 2680 阅读 · 1 评论 -
Java 数据结构之 List接口中的replaceAll() ---UnaryOperator
default void replaceAll(UnaryOperator<E> operator)对于该方法,Java jdk1.8手册里是这么描述的 :用函数接口的返回结果替代原list中的值.list 接口中的源码default void replaceAll(UnaryOperator<E> operator) { Objects.require...原创 2019-01-03 16:40:14 · 3369 阅读 · 0 评论 -
java数据结构之并发队列中的阻塞队列 BlockingQueue 接口概述
阻塞队列 (BlockingQueue)是Javautil.concurrent包下重要的数据结构,BlockingQueue提供了线程安全的队列访问方式:当阻塞队列进行插入数据时,如果队列已满,线程将会阻塞等待直到队列非满;从阻塞队列取数据时,如果队列已空,线程将会阻塞等待直到队列非空。并发包下很多高级同步类的实现都是基于BlockingQueue实现的。BlockingQueue 的...原创 2019-03-07 17:41:09 · 208 阅读 · 0 评论 -
java 数据结构之 并发队列 之Queue 接口实现类 ConcurrentLinkedDeque 源码解析
private void linkFirst(E e) { checkNotNull(e); final Node<E> newNode = new Node<E>(e); restartFromHead: for (;;) for (Node<E> h = head, p = h, q;;) { ...原创 2019-03-07 17:32:08 · 395 阅读 · 0 评论 -
java数据结构之并发队列中的阻塞队列 BlockingDeque 接口实现之 LinkedBlockingDeque
1 双向并发阻塞队列。所谓双向是指可以从队列的头和尾同时操作,并发只是线程安全的实现,阻塞允许在入队出队不满足条件时挂起线程,这里说的队列是指支持FIFO/FILO实现的链表。首先看下LinkedBlockingDeque的数据结构。通常情况下从数据结构上就能看出这种实现的优缺点,这样就知道如何更好的使用工具了。从数据结构和功能需求上可以得到以下结论:要想支持阻塞功能,队列的容...转载 2019-03-07 17:29:29 · 224 阅读 · 0 评论 -
为什么会有原码、反码和补码?
为什么会有原码、反码和补码?在计算机内,定点数有3种表示法:原码、反码和补码所谓原码就是前面所介绍的二进制定点表示法,即最高位为符号位,“0”表示正,“1”表示负,其余位表示数值的大小。反码表示法规定:正数的反码与其原码相同;负数的反码是对其原码逐位取反,但符号位除外。补码表示法规定:正数的补码与其原码相同;负数的补码是在其反码的末位加1。正数的反码和补码都是和原码相同。例如...转载 2019-03-06 16:13:29 · 791 阅读 · 0 评论 -
java 数据结构之 map 多线程实现 concurrentSkipListMap 源码解析
什么是跳表 :https://blog.youkuaiyun.com/xiaoliuliu2050/article/details/73230494Key-Value数据结构目前常用的key-value数据结构有三种:Hash表、红黑树、SkipList,它们各自有着不同的优缺点(不考虑删除操作):Hash表:插入、查找最快,为O(1);如使用链表实现则可实现无锁;数据有序化需要显式的排序操作。红...转载 2019-03-08 17:07:09 · 375 阅读 · 0 评论 -
java 数据结构之arraylist Spliterator 使用和源码解析
以下是一个案例来使用spliterator :首先需要定义一个线程,然后需要将拆分后的迭代器传入该线程。执行start()方法让实现的run()方法进入就绪状态等待调用自定义线程代码如下: 1 package com.FM.ArrayListStudy; 2 3 import java.util.Spliterator; 4 import java.util.function...原创 2019-01-03 15:37:28 · 3182 阅读 · 2 评论 -
Java list 遍历之 ListIterator和Iterator 的区别及使用
我们在使用List,Set的时候,为了实现对其数据的遍历,我们经常使用到了Iterator(迭代器)。使用迭代器,你不需要干涉其遍历的过程,只需要每次取出一个你想要的数据进行处理就可以了。但是在使用的时候也是有不同的。List和Set都有iterator()来取得其迭代器。对List来说,你也可以通过listIterator()取得其迭代器,两种迭代器在有些时候是不能通用的,Iterator ...转载 2019-01-03 14:53:21 · 3073 阅读 · 0 评论 -
java 数据结构之 CopyOnWriteArraySet 源码解析
是的原创 2019-01-02 19:03:53 · 164 阅读 · 0 评论 -
java 数据结构之Treemap 源码解析
概述文章的内容基于JDK1.7进行分析,之所以选用这个版本,是因为1.8的有些类做了改动,增加了阅读的难度,虽然是1.7,但是对于1.8做了重大改动的内容,文章也会进行说明。TreeMap实现了SotredMap接口,它是有序的集合。而且是一个红黑树结构,每个key-value都作为一个红黑树的节点。如果在调用TreeMap的构造函数时没有指定比较器,则根据key执行自然排序。这点会在接下...转载 2019-01-02 19:01:13 · 142 阅读 · 0 评论 -
java 数据结构之 map 及非线程安全实现类hashmap treemap linkedhashmap概述
HashMapHashMap 是一个散列表,它存储的内容是键值对(key-value)映射。既然要介绍HashMap,那么就顺带介绍HashTable,两者进行比对。HashMap和Hashtable都是Map接口的经典实现类。由于Hashtable是个古老的Map实现类(从Hashtable的命名规范就可以看出,t没有大写,并不是我写错了),需要方法比较繁琐,不符合Map接口的规范。但是H...转载 2019-01-02 16:22:20 · 931 阅读 · 0 评论 -
java 数据结构之 queue 和deque 概述
Queue用于模拟队列这种数据结构,队列通常是指“先进先出”(FIFO)的容器。新元素插入(offer)到队列的尾部,访问元素(poll)操作会返回队列头部的元素。通常,队列不允许随机访问队列中的元素。这种结构就如同我们生活中的排队一样。下面我们就来介绍Queue中的一个重要的实现类PriorityQueue。PriorityQueuePriorityQueue保存队列元素的顺序不是按加入...转载 2019-01-02 16:16:22 · 610 阅读 · 0 评论 -
java数据结构之 list 概述
一、List集合list 是用来存储元素的集合,因为业务场景不同所以有arraylist (方便查询)和linkedlist (方便增删)之分其他场景类似于先进先出 ,所以出现了Queue , 排队的时候也有优先窗口,所以有了优先级队列,先进后出 ,所以出现了 stack , 需要从两头存取元素,所以出现了双端队列,linkedlist 是一种优秀的数据结构,它是列表,也是队列...转载 2019-01-02 16:11:07 · 1153 阅读 · 0 评论 -
java 数据结构之 set 概述
set 接口的主要实现类是 hashset ,treeset ,enumset一、HashSet类HashSet简介HashSet是Set接口的典型实现,实现了Set接口中的所有方法,并没有添加额外的方法,大多数时候使用Set集合时就是使用这个实现类。HashSet按Hash算法来存储集合中的元素。因此具有很好的存取性能。HashSet特点1.不能保证元素的排列顺序,顺序可...转载 2019-01-02 16:02:00 · 152 阅读 · 0 评论 -
选择排序
1、基本思想:在要排序的一组数中,选出最小的一个数与第一个位置的数交换;然后在剩下的数当中再找最小的与第二个位置的数交换,如此循环到倒数第二个数和最后一个数比较为止。 2、实例 3、算法实现 /** * 选择排序算法 * 在未排序序列中找到最小元素,存放到排序序列的起始位置 * 再从剩余未排序元素中转载 2017-06-28 14:56:00 · 228 阅读 · 0 评论 -
快速排序
快速排序的基本思想: 通过一趟排序将待排序记录分割成独立的两部分,其中一部分记录的关键字均比另一部分关键字小,则分别对这两部分继续进行排序,直到整个序列有序。快速排序的示例:(a)一趟排序的过程:(b)排序的全过程 把整个序列看做一个数组,把第零个位置看做中轴,和最后一个比,如果比它小交换,比它大不做任何处理;交换了以后再和转载 2017-06-28 14:51:48 · 254 阅读 · 0 评论 -
冒泡排序
每次选择出一个 最大值。public void BubbleSort(int[] a) { int temp = 0; int len = a.length; for (int i = 0; i for (int j = 1; j if (a[j -转载 2017-06-28 14:37:03 · 223 阅读 · 0 评论 -
java hashcode equals
object 判断两个对象是否相同判断两个对象是否为同一个引用,引用地址如何获得,通过hashcode ()方法 返回的就是对象的内存地址。String Integer Double 等类重写了 euqals方法,判断两个对象是否相同的方式就是 判断两个对象的内容是否相同。这样就不用判断 hashcode 了。如果一个类的多个对象 被存储在has原创 2017-06-27 11:55:06 · 215 阅读 · 0 评论 -
2017 bat
Java基础 ● 集合类以及集合框架;HashMap与HashTable实现原理,线程安全性,hash冲突及处理算法;ConcurrentHashMap; ● 进程和线程的区别; ● Java的并发、多线程、 线程模型; ● 什么是线程池,如何使用? 答:线程池就是事先将多个线程对象放到一个容器中,当使用的时候就不用new 线程而是直接去池中拿线转载 2017-06-27 08:56:36 · 307 阅读 · 0 评论 -
java 高级面试题1
1. Java有什么新特性Java语言编译器类库工具Java运行时1. 1 Java语言Lambda表达式(闭包)允许把函数作为一个方法的参数,或者把代码看成数据。[java] view plain copyArrays.asList("a","b","d").forEach(e->System.out.print转载 2017-06-26 17:20:15 · 472 阅读 · 0 评论 -
java 基础面试题
一、String,StringBuffer, StringBuilder 的区别是什么?String为什么是不可变的?答: 1、String是字符串常量,StringBuffer和StringBuilder都是字符串变量。后两者的字符内容可变,而前者创建后内容不可变。2、String不可变是因为在JDK中String类被声明为一个final类。3、StringBuffe转载 2017-06-26 17:16:40 · 571 阅读 · 0 评论 -
如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。其中内存只有1G。
如何有效合并两个文件:一个是1亿条的用户基本信息,另一个是用户每天看电影连续剧等的记录,5000万条。其中内存只有1G。显然内存不能同时存下所有的数据,所以考虑分而治之的思想。假设1K Byte可以保存一个用户的基本信息和看电影记录。我们可以将基本信息和看电影记录都按照hash(user_name)%100的余数各分成100个小文件。利用1G内存,我们可以每次只处理一对小文转载 2017-06-26 16:44:49 · 724 阅读 · 0 评论 -
java 数据结构之map之 hashMap concurrentHashmap源码解析
转载自https://javadoop.com/post/hashmap网上关于 HashMap 和 ConcurrentHashMap 的文章确实不少,不过缺斤少两的文章比较多,所以才想自己也写一篇,把细节说清楚说透,尤其像 Java8 中的 ConcurrentHashMap,大部分文章都说不清楚。终归是希望能降低大家学习的成本,不希望大家到处找各种不是很靠谱的文章,看完一篇又一篇,可是...转载 2017-06-26 16:34:22 · 210 阅读 · 0 评论