算法

国密算法

我是研究僧i 提交于 2020-02-29 04:55:51
算法分类 国密即国家密码局认定的国产密码算法。主要有SM1,SM2,SM3,SM4。密钥长度和分组长度均为128位。 SM1 为对称加密。其加密强度与AES相当。该算法不公开,调用该算法时,需要通过加密芯片的接口进行调用。 SM2为非对称加密,基于ECC。该算法已公开。由于该算法基于ECC,故其签名速度与秘钥生成速度都快于RSA。ECC 256位(SM2采用的就是ECC 256位的一种)安全强度比RSA 2048位高,但运算速度快于RSA。 SM3 消息摘要。可以用MD5作为对比理解。该算法已公开。校验结果为256位。 SM4 无线局域网标准的分组数据算法。对称加密,密钥长度和分组长度均为128位。 SM2算法 SM2算法:SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现数字签名密钥协商和数据加密等功能。SM2算法与RSA算法不同的是,SM2算法是基于椭圆曲线上点群离散对数难题,相对于RSA算法,256位的SM2密码强度已经比2048位的RSA密码强度要高 学习sm2算法,首先学习ECC算法 ECC算法描述:   1、用户A选定一条适合加密的椭圆曲线Ep(a,b)(如:y2=x3+ax+b),并取椭圆曲线上一点,作为基点G。   2、用户A选择一个私有密钥k

lintcode算法题之147-水仙花数

廉价感情. 提交于 2020-02-29 03:48:01
47. 水仙花数 水仙花数的定义是,这个数等于他每一位数上的幂次之和 见维基百科的定义 比如一个3位的十进制整数 153 就是一个水仙花数。因为 153 = 13 + 53 + 33。 而一个4位的十进制数 1634 也是一个水仙花数,因为 1634 = 14 + 64 + 34 + 44。 给出 n ,找到所有的n位十进制水仙花数。 样例 样例 1: 输入: 1 输出: [0,1,2,3,4,5,6,7,8,9] 样例 2: 输入: 2 输出: [] 样例解释: 没有2位数的水仙花数。 代码区: public class Solution { /** * username:softstarhhy * @param n: The number of digits * @return: All narcissistic numbers with n digits */ public List<Integer> getNarcissisticNumbers(int n) { // write your code here List list=new ArrayList<Integer>(); int start = (int)Math.pow(10, n-1); int end = (int)Math.pow(10, n); /* for(int s=0;s<n;s++) { n=

数据结构与算法基础------计算时间复杂度

三世轮回 提交于 2020-02-28 23:26:01
算法效率从以下两个方面考虑: 时间效率:指的是算法所耗费的时间 空间效率:指的是算法执行过程中所耗费的存储空间 时间 效率和空间效率有时候是矛盾的。 在这里我们只讨论事前分析法,因为事后分析法也和计算机的软硬件等其他客观条件有关。 事前分析法 一个算法的运行时间大致等于计算机执行一种 简单操作 (如赋值,比较,移动等)所需的时间与算法中进行的 简单操作的次数的乘积 。 以矩阵为例: for ( i = 1 ; i <= n ; i ++ ) //n+1次 for ( j = 1 ; j <= n ; j ++ ) //n*(n+1)次 { c [ i ] [ j ] = 0 ; //n*n次 for ( k = 0 ; k <= n ; k ++ ) //n*n*(n+1)次 c [ i ] [ j ] = c [ i ] [ j ] + a [ i ] [ k ] * b [ k ] [ j ] ; //n*n*n次 } 那么上述算法所消耗的时间是该算法中每条语句的执行次数之和,则消耗的时间T(n)=2n 3 +3n 2 +2n+1。 为了便于比较不同算法的时间效率,我们仅比较他们的数量级。 若某个辅助函数f(n)(即只包含最高数量级的函数),使得当n趋近于无穷大时,T(n)/f(n)的极限值为 不等于零的常数 ,则称f(n)是T(n)的同数量级函数。记作 T(n)=O(f(n)

串的模式匹配 : KMP算法

巧了我就是萌 提交于 2020-02-28 21:09:03
当存在 [1] 这样的现象,[2] 这样的做法,是否合理以及正确,或者有 [1] 这样的现象,为什么就可以有 [2] 这样的做法 ? 算法思想 [1] 当主串的 第i个字符与子串的第j个字符失配时 ,若子串的 前(k-1)个字符 和子串的 后(k-1)个字符 匹配, ‘p 1 ……p k-1 ’=‘p j-k+1 ……p j-1 ’ ,则只需主串 S 的第 i 个字符与子串 P 的第 k 个字符开始向后比较即可,i 不必回溯。 [2] k的值只与子串的组成有关,而与主串无关,即 k 值与 j 失配位置之前的子串的结构相关,每一个 j 位置对应一个k值,用next[j]存储,表示 当模式串中第 j 个字符与主串中第 i 个字符失配时 ( S i ≠ P j ) , 下一次模式串 P 中第next[j]个字符与主串 S 的第i个字符比较 。 简而言之 若子串中,‘p 1 ……p k-1 ’=‘p j-k+1 ……p j-1 ’,则在 j 处的失配,i 不回溯,直接和子串的 k 位置比较即可,k位置用 next[j] 存储。 问题提出 其实,算法思想中[1]是 现象 ,也就是子串中需要存在这样的前后缀相等时,[2]是 做法 ,表示在失配的位置 j ,模式串应该向右滑动 k 距离。那么当存在这样的现象,这样的做法,是否合理以及正确?或者有 [1] 这样的现象,为什么就可以有 [2]

算法_笔记2

谁都会走 提交于 2020-02-28 19:45:44
插入排序算法 当i<0时停止 最坏情况n的平方 平均情况n 程序=数据结构+算法 软件=程序+文档 来源: https://www.cnblogs.com/yinghao_zhu/p/12378543.html

数据结构与算法学习笔记九 --- 快速排序算法

梦想与她 提交于 2020-02-28 18:51:27
快速排序算法(Quick Sort) 快速排序算法是一种递归排序算法; 其 原理 是通过一趟排序将要排序的数据分割成独立的两部分,其中一部分的所有数据都比另外一部分的所有数据都要小,然后再按此方法对这两部分数据分别进行快速排序,整个排序过程可以递归进行,以此达到整个数据变成有序序列。 简单点理解就是:以序列中的任意一个元素为基准(一般以第一个元素),通过逐个比较后,找到这个基准元素的合适位置(即在基准元素的左边元素都比它小,右边都比它大),这时在将序列分成左右两个部分,在继续上述的操作,直到不能再分为止(只有一个元素),此时排序也就完成。 快速排序过程图 快速排序算法的python实现 快速排序算法的代码实现最主要的是找到基准元素的位置,然后分成两部分,再用递归的方法,重复实现一样的操作。 代码如下: def quick_sort ( alist , first , last ) : """快速排序""" # 参数first,last:指定序列排序的位置起始和终止下标 # 只有当first小于last时才退出排序,此时元素只有一个。 if first >= last : return alist else : mid_value = alist [ first ] low = first high = last while low < high : # high 左移 while

AES CFB/OFB/ECB/CBC/CTR优缺点

不想你离开。 提交于 2020-02-28 17:18:21
AES CFB/OFB/ECB/CBC/CTR优缺点 摘自:http://www.metsky.com/archives/418.html 发表时间:2010年05月11 分类: 网络日志 作者: 天缘 AES常见加密模式有CFB/OFB/ECB/CBC/CTR,本文概述这些算法特点,让大家更快的了解AES,当然天缘也不是专业做算法的,工作中也只是使用到才会学习一点,如有错误,欢迎指出。 一、Cipher feedback(CFB) CFB算法优点: 同明文不同密文,分组密钥转换为流密码。 CFB算法缺点: 串行运算不利并行,传输错误可能导致后续传输块错误。 二、Output feedback(OFB) OFB算法优点: 同明文不同密文,分组密钥转换为流密码。 OFB算法缺点: 串行运算不利并行,传输错误可能导致后续传输块错误。 三、Electronic codebook(ECB) ECB算法优点: 简单、孤立,每个块单独运算。适合并行运算。传输错误一般只影响当前块。 ECB算法缺点: 同明文输出同密文,可能导致明文攻击。我们平时用的AES加密很多都是ECB模式的,此模式加密不需要向量IV。 四、Cipher-block chaining(CBC) CBC算法优点: 串行化运算,相同明文不同密文 CBC算法缺点: 需要初始向量,不过这其实不算缺点,下文的CTR也是需要随机数的

【技术分享】一:搜索排序—概述

妖精的绣舞 提交于 2020-02-28 16:15:06
本文原作者:彭江军,经授权后发布。 原文链接: https://cloud.tencent.com/developer/article/1523867 1: 搜索排序的概念 搜索排序:在一次会话中,用户在交互界面输入需要查询的query,系统给返回其排好序的doc例表的过程。 2:搜索排序和推荐排序的区别 推荐:基于用户的行为挖掘出用户的兴趣,为其推荐对应的视频,doc等。 2.1从展示形式来讲: 搜索排序每次展示一系列的消息例表,如下图所示: 推荐每次可以展示一条消息,但是我们看到的这条可以被展示的doc也是经过背后的排序算法得到的。 也可以在界面上一次展示多条doc,这种情况下推荐排序的展示形式也是多条和搜索排序没有本质的区别。如腾讯视频的火锅视频的推荐就是一次展示多个视频,在这种情况下展示的顺序就由推荐的排序算法给出的。 2.2 难度上而言: 排序相比推荐而言,用户有一个较为明确的目的,所以在排序的初级阶段该问题的难度并不高。但搜索排序在后期的优化上面难度也很大。 前期,因为即使单纯的依据内容与query的文本相关性、内容的质量和内容的时新就可以给出一个还不错的排序结果。但是在基础的排序上在想来提升用户的体验,提升体验包括挖掘用户的意图,提高用户的点击率,长点击率等就比较困难。 由于不管是推荐还是搜索最后都离不开排序,下面结合自己的经验和项目写一点对排序的理解。 3

十大经典算法排序总结对比

ぐ巨炮叔叔 提交于 2020-02-28 13:31:56
十大经典算法排序总结对比 一张图概括: 主流排序算法概览 名词解释: n : 数据规模 k :“桶”的个数 In-place : 占用常数内存,不占用额外内存 Out-place : 占用额外内存 稳定性 :排序后2个相等键值的顺序和排序之前它们的顺序相同 冒泡排序(Bubble Sort) 冒泡排序须知: 作为最简单的排序算法之一,冒泡排序给我的感觉就像Abandon在单词书里出现的感觉一样,每次都在第一页第一位,所以最熟悉。。。冒泡排序还有一种优化算法,就是立一个flag,当在一趟序列遍历中元素没有发生交换,则证明该序列已经有序。但这种改进对于提升性能来说并没有什么太大作用。。。 什么时候最快(Best Cases): 当输入的数据已经是正序时(都已经是正序了,我还要你冒泡排序有何用啊。。。。) 什么时候最慢(Worst Cases): 当输入的数据是反序时(写一个for循环反序输出数据不就行了,干嘛要用你冒泡排序呢,我是闲的吗。。。) 冒泡排序动图演示: 冒泡排序JavaScript代码实现: function bubbleSort(arr) { var len = arr.length; for (var i = 0; i < len; i++) { for (var j = 0; j < len - 1 - i; j++) { if (arr[j] > arr[j+1])