精华内容
下载资源
问答
  • NIST数字测试套件使用说明

    千次阅读 2018-09-13 15:25:29
    Bitstreams输入1就不会报underflow错误,或者把数据长些。 Bitstreams输入1的话就不会报溢出异常或者段错误。 但是bitstreams为1时没办法得到正确的结果。 自己随机写了一个32*10的随机序列,./assess...

    NIST 测试套件是由15个测试组成的统计软件包,这些是为了测试随机(任意长度)由基于硬件或软件的密码随机或伪随机数生成器产生的二进制序列。测试关注于各种不同类型的已存在的非随机序列。有些测试可以分成各种子测试。

    15个测试主要是(属于密码算法安全测试方法):

    1. 频率(单比特)测试
    2. 块内频数测试(Frequency Test within a Block)
    3. 动向(Run)测试
    4. 最大游程检测
    5. 二进制矩阵秩(Binary Matrix Rand)测试
    6. 频谱测试
    7. 非重叠字匹配测试
    8. 重叠字匹配测试
    9. Maurer通用统计检测

             10、线性复杂度测试

             11、系列(Serial)测试

             12、近似熵测试

             13、累积和测试

             14、随机游程(Random Excursions)测试

             15、随机游程变量(Random Excursions Variant)测试

    这里没有依赖性(扩散与混乱)---完备性与雪崩效应测试、自相关测试和Lempel-Ziv压缩测试。

     

     

    下载的软件sts-2.1.2压缩包中,解压后源文件中有上述的密码算法安全测试的源码,如下

    若在windows下,由于该软件是基于linux环境开发的,里面的源文件由makefile控制,要想在windows下使用,则需要借助另一软件Cygwin。

    Cygwin官网下载地址:http://www.cygwin.com/

    安装使用该软件参考:http://www.programarts.com/cfree_ch/doc/help/UsingCF/CompilerSupport/Cygwin/Cygwin1.htm

    上面有详细讲说,但对于这个随机数测试包需要注意的主要是一下几点:

    1、下载安装的时候一定注意要把组件都勾上,特别是gcc一定要勾上,如果不知道怎么选,那就有gcc的地方全勾上吧。因为需要gcc这个编译器。
    2、运行Cygwin,进入该软件包sts-2.1.1中包含makefile文件的文件夹,输入:make命令,该软件就在安装了,完后之后会发现多了一个文件(assess.exe),那个就是可执行文件了。有了它就安装成功了。

     

    还可以参考一下链接:https://wenku.baidu.com/view/dc0ada02eff9aef8941e0644.html

     

    由于本机本身装有虚拟机及ubuntu系统,所以直接在Linux操作系统下安装。步骤如下:

    1. 打开已经安装好的ubuntu系统,在管理员权限进入系统,把已经下好的数字测试套件包拷贝到Home目录下
    2. 对包进行解压缩,解压在该目录下。
    3. 进入到解压缩的该目录下(输入命令cd 文件名)
    4. 输入make进行编译makefile文件,得到assess文件(编译成功后该目录下会有assess文件)
    5. 在该目录下输入./assess <datalength>,datalength为测试的数据长度。

     

     

    下面举例说明

     

    1. 进入软件界面后,有基本操作指示(生成器选项)

    基本测试用matlab写一个随机数矩阵(x = randsrc(1,32e3,[0,1]);

    )把数据复制到txt文本中,然后把随机数矩阵的文本array.txt复制到该目录下,

     

    根据生成器提示选择0输入文件,输入array.txt,之后则是选择测试类型,即上面的15种测试类型。

     

    或者测试全部,它有一个提示可以测试上述15种测试,即Enter Choice输入1

     

    How many bitstreams? 输入流个数;这个流个数和第一步中的文件位长度存在这样关系:

    位长度*bitstreamsnum=文件总位长度。一般随机数文件在32M以内(2G内存支持),bitstreamsnum默认输入1,第一步输入文件总bit长度。如果文件超过32M那么计算过 程中内从不足,因此需要第一步输入文件总长度的1/8、1/16...,然后在此处输入8、16,等价于把源文件划分为等长的几条流,来做随机性检查。

    Bitstreams输入默认1后,下面会问输入文件的形式是ASCII类型的数据构成的序列(ASCII 中的0和1)还是8位的二进制数据。

    最后完成后的结果在该目录下的experiments/AlgorithmTesting下的某种测试目录下

    每种算法目录下都有stats.txt 文件中描述的是P-value值,在ALPHA = 0.0100条件下(默认值),貌似这个值大于0.01就表示差不多随机,越大越好。

     

    注意:使用所有测试时,参数设置如下,但是可能数据长度并不适合某些测试,所以最后只有13种统计测试完成。

     

     

     

    测试方法参看:https://wenku.baidu.com/view/020b8df47c1cfad6195fa7e0.html

    伪随机性是密码算法安全性的重要指标,用于评估密码算法的伪随机性,其原理一般是假设检验,一般要求接收水平Pv>0.01

    比如看动向(Run)测试结果不符合统计量标准PI=0.280969

    单比特动向测试是检测算法f的输出在0和1之间摆动的次数,其测试方法如下:

    测试数据文件,有几个示例在下面这个文件夹中

    1M二进制比特位数据

    这个地方输入表示的是15个测试中哪些测试是需要应用在该序列中,1表示应用,0表示不应用,这里就是表示重叠字匹配测试(Overlapping Template Matchings)

    我们照着样例文件写数据,按照示例测试data.pi数据:

    Data.pi数据中的二进制数我们可以先复制到test.txt文件中,再用matlab读取数据

    clc;clear;

    res = textread('test.txt','%s');

     

    %res为待转换的cell

    for n=1:length(res)

          x{n}=str2num(res{n});

    end

    for m=1:length(x)

          y(m)=x{m}(1);

    end

    % format longG

    得到data.pi中的数据总共有1004932个二进制数

    The file finalAnalysisReport.txt contains the results of these two forms of analysis.

    这里在sts目录下的experiments/AlgorithmTesting的finalAnalysisReport.txt文件中可以看到所有测试的结果。注意这里data.pi输入数据是100000的值,那么./assess 100000就得写10万,不然会报数据不够的错误。

    列C1-10代表相对应的p值的频率,列ProPortion代表二进制序列通过的比率。if 1000 binary sequences were tested (i.e., m= 1000), α= 0.01 (the significance level), and 996 binary sequences had P-values .01, then the proportion is 996/1000 = 0.9960.

    二进制序列长度就改how many bitstreams的位置。(只是需要注意./assess 长度*bitstreams长度要小于原数据总的数据长度)

     

    ./assess 长度,这里的长度是一组的长度,所以要注意序列的位数一定要足够,不然测试会报数据不够的错误。

    ./assess 10000(数据长度改小测试一下),结果如下

    上述结果是bitstreams=100时的结果,bitstreams是测试样例中有多少组数据,proportion表示比特流中的比率

    nistspecialpublication800-22r1a说明文档中,91页写到一般建议和规范,告诉我们为什么数据集没有通过统计测试:

    1. An incorrectly programmed statistical test除了特殊情况,我们认为统计测试是为了解决某类特殊问题而量身定做的。但是部分统计测试受限于人工上限,比如随机偏移测试不能大于max{1000,n/128}次循环,依据实验条件,参数可能需要增加。
    2. An underdeveloped (immature) statistical test:很多统计测试都是以渐进近似为基础的
    3. An improper implementation of a random number generator:有可能由于硬件上设计的瑕疵或者编码实现错误导致硬件RNG或者软件RNG失败。
    4. Improperly written codes to harness test input data:一般测试数据在统计测试之前由RNG生成。比如,可能处理包括由RNG分割成合适大小的块的输出流,以及0转换成负数。
    5. Poor mathematical routines for computing P-values
    6. Incorrect choices for input parameters某些统计测试可能对输入参数较为敏感。比如序列长度10^6,块长度接近log2(n)是可以接受的。经验证据表明,在块长度m大于14时,观察到的检验统计量将开始与期望值不一致(特别是已知的数据生成器,如sha-1)。

    通常需要考虑的参数有:序列长度,样本大小,块大小和模板(template)。

    样本大小:The issue of sample size is tied to the choice of the significance level. NIST recommends that, for these tests, the user should fix the significance level to be at least 0.001, but no larger than 0.01.

    If a sample of only 100 sequences is selected, it would be rare to observe a rejection.

    Thus, the sample should be on the order of the inverse of the significance level (α-1). That is, for a level of 0.001, a sample should have at least 1000 sequences.

    块大小:Block sizes are dependent on the individual statistical test. In the case of Maurer's Universal Statistical test, block sizes range from 1 to 16.

    一般情况下,NIST建议选择的块大小不大于log2 nn是序列长度。

    自己写个数据测试一下:

    Matlab:

    pop=round(rand(1000,25));

    xlswrite('b',cellstr(reshape(sprintf(['''' repmat('%d',1,size(pop,2))],pop.'),[],size(pop,1))'))

             写到xls表格中,然后拷贝到txt文件中

             然后在ubuntu系统下按照上面的步骤测试该txt文本中的ASCII码表,最后测试完成后会出现错误:Segmentation fault (core dumped)

           Segmentation fault (core dumped)多为内存不当操作造成。空指针、野指针的读写操作,数组越界访问,破坏常量等。如最近的势能图代码中的链表操作,对链表的新增和释放包括赋值等等,如出现不当操作都有可能造成程序崩溃。对每个指针声明后进行初始化为NULL是避免这个问题的好办法。排除此问题的最好办法则是调试。

    ulimit为shell内建指令,可用来控制shell执行程序的资源  -a显示目前资源限制的设定。

    Stack size这里是8192kbytes最大上限2G

    参  数:
       -a  显示目前资源限制的设定。 
       -c <core文件上限>  设定core文件的最大值,单位为区块。 
       -d <数据节区大小>  程序数据节区的最大值,单位为KB。 
       -f <文件大小>  shell所能建立的最大文件,单位为区块。 
       -H  设定资源的硬性限制,也就是管理员所设下的限制。 
       -m <内存大小>  指定可使用内存的上限,单位为KB。 
       -n <文件数目>  指定同一时间最多可开启的文件数。 
       -p <缓冲区大小>  指定管道缓冲区的大小,单位512字节。 
       -s <堆叠大小>  指定堆叠的上限,单位为KB。 
       -S  设定资源的弹性限制。 
       -t <CPU时间>  指定CPU使用时间的上限,单位为秒。 
       -u <程序数目>  用户最多可开启的程序数目。 
       -v <虚拟内存大小>  指定可使用的虚拟内存上限,单位为KB。

    可以参看https://blog.csdn.net/zqtsx/article/details/24383755这篇文章,利用gdb等命令查看进程。

    这里出现Segmentation fault大概是因为数据格式不对。

     

    Igamc:underflow错误,网上说是因为数据量太少。在bitstreams那输入1,即只有一个比特流数据,那么通常也没办法看到没有通过的序列(假设序列是随机生成的),即proportion=1/1,因为这一组数据要么通过测试要么没通过测试。Bitstreams输入1就不会报underflow错误,或者把数据弄长些。

    Bitstreams输入1的话就不会报溢出异常或者段错误。

    但是bitstreams为1时没办法得到正确的结果。

    自己随机写了一个32*10的随机序列,./assess 32和bitstreams=10得到结果

    对于每个统计测试除了随机变量测试外,最小通过率接近0.8,其实结果不准确,bitstreams为1也是不准确,也没办法得到p值,按照官方说明文档要求bitstreams应该在(100,1000)的范围内。

     

     

    NIST测试软件里面有伪随机数生成器,

    Linear Congruential Generator (LCG),参看帮助文档115

    Quadratic Congruential Generator I (QCG-I)

    Quadratic Congruential Generator II (QCG-II)

    Cubic Congruential Generator II (CCG) ,参看帮助文档116

    Exclusive OR Generator (XORG)

    Modular Exponentiation Generator (MODEXPG)

    Secure Hash Generator (G-SHA1) ,参看帮助文档117

    Blum-Blum-Shub (BBSG)

    Micali-Schnorr Generator (MSG) ,参看帮助文档118

    例如第一个线性同余生成器是通过算法生成伪随机序列,关系式是

    生成的伪随机数直接进入测试,操作如下,

    这里15个测试只选择了Frequency测试,得到结果在LCG文件夹下看,15个子文件夹代表15种测试方法的结果,里面有两个子文件

    假设bitstreams=120

    Results.txt包含了120次的P值的结果

    stats.txt包含了120次比特流的详细结果,报错参数以及是否通过该项测试结果

     

    这里stats.txt是每次频率测试时的计算信息

    ./assess 数据长度 ,其中数据长度L=100000

    特别注意:这里bitstreams*L必须小于等于文件中的数据长度,否则会报数据不够的错误。

    The nth partial sum是100000个0和1序列转化为-1和1之后的和,如下面描述

    拿第一组数据来检验,利用matlab的erf函数来检验

    Sn=34;

    n=100000;

    Sobs=abs(Sn)/sqrt(n);

    erfc=1-erf(Sobs/sqrt(2))

    得到结果是0.9144与结果一致。

    汇总的结果如下,在finalAnalysisReport.txt文件中

    由上可知用自带的随机数生成的随机序列用来统计测试的结果和预想的是一致的,下面用自己写入的数据来进行测试看是否与设想完全一致。

    这里面指示测试选0时虽然后面全部写000…但是仍然需要数据,如果数据不够就会报错。

    下面看结果

    16个p值如下,

    部分详细状态

    原数据如下,

    按10分数据长度,总共16组数据,后面多的数据没有读了。

    第一个1010110100,总和为0,按下面计算方式p值为1

    第二个1011110000,总和仍为0

    第三个0101001111,总和为2,按下面计算p值为0.5271和stats.txt的结果一致

    Freq.txt文件记录着0和1出现的频数

    最终分析结果文件如下,16组数据全部通过频率统计测试(P值>0.01)

    说明文档解释C1-C10是代表p值的频率(其实不太明白)。Proportion是指16组数据中通过统计测试的比率。

     

    注:这里只是完整的验证了频率测试,如果需要进行其他验证测试只需要修改下面这个位置,

    特别注意:rank测试中是测试源序列中固定长度子链间的线性依赖关系,且子链必须是32*32的矩阵类型,eg./assess 1024

    Random Excursions 和 Random Excursions Variant 测试要求输入的比特数最小是1,000,000bits。

    必须满足其基本要求才不会报错:Test Not Applicable.There are an insufficient number of cycle.

    比如动向测试编号是04,那么在

    12345678911111

             012345

    下面输入

    000100000000000即可

    展开全文
  • 在java程序里,图片需要添加水印,可是我添加的水印文字在亮度很大的地方看不清楚,而水印相机是可以的。想请教一下,怎么搞水印相机...[图片说明](https://img-ask.csdn.net/upload/201607/20/1468997835_757702.png)
  • 教你如何把书本上的快速到电脑上

    万次阅读 多人点赞 2012-09-19 13:22:24
    前记:记得某天,超人让我帮忙把一些书本上的题目到电脑上,按照我们常规思维,就是对着书本的内容一个一个输进电脑。这样,速度的快慢主要看输入文字那个人的打字速度和工作效率了,很大程度上都是主观上的因素。...

    前记:记得某天,超人让我帮忙把一些书本上的题目弄到电脑上吐舌头,按照我们常规思维,就是对着书本的内容一个一个输进电脑可怜。这样,速度的快慢主要看输入文字那个人的打字速度和工作效率了惊讶,很大程度上都是主观上的因素尴尬。其实,虽然我是学计算机的,没办法,我也如此奋斗,一个个地输进去委屈。边干活的时候边想疑问,是不是有更好的办法生气,不用人工手动输入就可以把书本上的字给搬上电脑来呢羡慕,通过拍照图片?通过扫描?这样,以后就可以提高超人的工作效率,给超人省下很多很多时间吐舌头。回到自己宿舍,曾经网上搜了一些资料,却迟迟没去试过是否可行敲打。今天,看了微博有这么一则转发,说动手就动手得意,尝试了一下,Bingo,果然行得通大笑!废话少扯,下面对整个过程做一些介绍微笑

     

    前期工作:
    硬件:
    电脑一台,数码相机(手机亦可,主要能拍出清晰的图片)
    软件:word2003(其他的版本还没试,想想应该都可以,貌似2010版可以另存为PDF的文件)
    doPDF (百度一下即可搜到,是一款免费的PDF制作软件,我的版本是v7.3.382 多国语言版)
    CAJViewer(有些资料说是AJViewer,其实是CAJViewer,百度即可搜到,是一款免费的阅读器,我的版本是v 7.1.2 Build 857)

     

    免费下载链接:

    doPDF:http://download.csdn.net/detail/chindroid/4579904

    CAJViewer:http://download.csdn.net/detail/chindroid/4579916

     

     

    下面对过程和步骤做详细说明:
    1、在电中安装doPOF和CAJViewer(安装过程不细说)。
    2、用相机把书本上需要的文字内容拍下来〔照片效果越好,就可以可以大大缩小稍会图片转化成文字的误差率)。下图:

    3、在Word中插入你用相机对书上的文字拍的图片(打开Word一一插入( I )一一图片(P)——来自
    文件(F)一一选择相应照片一一插入)(亦可以直接拽拖进Word)。下图:


    4、在Word中选择文件菜单一一打印一一在打印机选项中选择doPDF一一确定—点击“浏览”选项一一选择文件保存的位置和填写文件名称一一保存——确定。下图:


    5、按照上面的步骤,电脑会自动打开CAJViewer软件。若没有自动打开该软件,可以自己手动打开CAJViewer软件。然后在CAJViewer中打开刚刚转换的PDF文件。

    6、选择CAJViewer中的,然后在需要的文字部分拖动鼠标画出虚线,稍等片刻即可弹出一对话框,对话框里面显示出框选图片的内容。(注意:图片效果不好的话,会出现一些乱码,要做后续工作:纠正。)

     

    7、点击“发送到WPS / Word(W)”按钮,就可以转化成Word文件了。或者复制至Word中(如下图所示)。后面的文字纠错之类的工作就不在这啰嗦了。

     

    要点提示:

    1、拍出来的相片一定要平整,最好对比强烈。(最最关键的部分)

    2、用doPDF生成PDF文件不只是一种方法,你也可以选择其他更好、更便捷的方法,能获得PDF文件即可。貌似2010版的word可以直接另存为PDF文件。

    3、如果熟练地使用这个方法,用不了一分钟就可以转出若干的文字,大大提高工作效率。

    4、切记切记:输出的文字一定要校对和纠错!!!

     

     

    ☞ 温馨提示:返回我的博客索引

     

     

    展开全文
  • 一篇文章彻底懂Base64编码原理

    万次阅读 多人点赞 2018-08-16 07:42:09
    上面是按照三个字节来举例说明的,如果字节数不足三个,那么该如何处理? 两个字节:两个字节共16个二进制位,依旧按照规则进行分组。此时总共16个二进制位,每6个一组,则第三组缺少2位,用0补齐,得到三个...

    在互联网中的每一刻,你可能都在享受着Base64带来的便捷,但对于Base64的基础原理又了解多少?今天这篇博文带领大家了解一下Base64的底层实现。

    Base64的由来

    目前Base64已经成为网络上常见的传输8Bit字节代码的编码方式之一。在做支付系统时,系统之间的报文交互都需要使用Base64对明文进行转码,然后再进行签名或加密,之后再进行(或再次Base64)传输。那么,Base64到底起到什么作用呢?

    在参数传输的过程中经常遇到的一种情况:使用全英文的没问题,但一旦涉及到中文就会出现乱码情况。与此类似,网络上传输的字符并不全是可打印的字符,比如二进制文件、图片等。Base64的出现就是为了解决此问题,它是基于64个可打印的字符来表示二进制的数据的一种方法。

    电子邮件刚问世的时候,只能传输英文,但后来随着用户的增加,中文、日文等文字的用户也有需求,但这些字符并不能被服务器或网关有效处理,因此Base64就登场了。随之,Base64在URL、Cookie、网页传输少量二进制文件中也有相应的使用。

    Base64的编码原理

    Base64的原理比较简单,每当我们使用Base64时都会先定义一个类似这样的数组:

    ['A', 'B', 'C', ... 'a', 'b', 'c', ... '0', '1', ... '+', '/']
    

    上面就是Base64的索引表,字符选用了"A-Z、a-z、0-9、+、/" 64个可打印字符,这是标准的Base64协议规定。在日常使用中我们还会看到“=”或“==”号出现在Base64的编码结果中,“=”在此是作为填充字符出现,后面会讲到。

    具体转换步骤

    • 第一步,将待转换的字符串每三个字节分为一组,每个字节占8bit,那么共有24个二进制位。
    • 第二步,将上面的24个二进制位每6个一组,共分为4组。
    • 第三步,在每组前面添加两个0,每组由6个变为8个二进制位,总共32个二进制位,即四个字节。
    • 第四步,根据Base64编码对照表(见下图)获得对应的值。
    0 A  17 R   34 i   51 z
    
    1 B  18 S   35 j   52 0
    
    2 C  19 T   36 k   53 1
    
    3 D  20 U   37 l   54 2
    
    4 E  21 V   38 m   55 3
    
    5 F  22 W   39 n   56 4
    
    6 G  23 X   40 o   57 5
    
    7 H  24 Y   41 p   58 6
    
    8 I  25 Z   42 q   59 7
    
    9 J  26 a   43 r   60 8
    
    10 K  27 b   44 s   61 9
    
    11 L  28 c   45 t   62 +
    
    12 M  29 d   46 u   63 /
    
    13 N  30 e   47 v
    
    14 O  31 f   48 w   
    
    15 P  32 g   49 x
    
    16 Q  33 h   50 y
    

    从上面的步骤我们发现:

    • Base64字符表中的字符原本用6个bit就可以表示,现在前面添加2个0,变为8个bit,会造成一定的浪费。因此,Base64编码之后的文本,要比原文大约三分之一。
    • 为什么使用3个字节一组呢?因为6和8的最小公倍数为24,三个字节正好24个二进制位,每6个bit位一组,恰好能够分为4组。

    示例说明

    以下图的表格为示例,我们具体分析一下整个过程。

    在这里插入图片描述

    • 第一步:“M”、“a”、"n"对应的ASCII码值分别为77,97,110,对应的二进制值是01001101、01100001、01101110。如图第二三行所示,由此组成一个24位的二进制字符串。
    • 第二步:如图红色框,将24位每6位二进制位一组分成四组。
    • 第三步:在上面每一组前面补两个0,扩展成32个二进制位,此时变为四个字节:00010011、00010110、00000101、00101110。分别对应的值(Base64编码索引)为:19、22、5、46。
    • 第四步:用上面的值在Base64编码表中进行查找,分别对应:T、W、F、u。因此“Man”Base64编码之后就变为:TWFu。

    位数不足情况

    上面是按照三个字节来举例说明的,如果字节数不足三个,那么该如何处理?

    在这里插入图片描述

    • 两个字节:两个字节共16个二进制位,依旧按照规则进行分组。此时总共16个二进制位,每6个一组,则第三组缺少2位,用0补齐,得到三个Base64编码,第四组完全没有数据则用“=”补上。因此,上图中“BC”转换之后为“QKM=”;
    • 一个字节:一个字节共8个二进制位,依旧按照规则进行分组。此时共8个二进制位,每6个一组,则第二组缺少4位,用0补齐,得到两个Base64编码,而后面两组没有对应数据,都用“=”补上。因此,上图中“A”转换之后为“QQ==”;

    注意事项

    • 大多数编码都是由字符串转化成二进制的过程,而Base64的编码则是从二进制转换为字符串。与常规恰恰相反,
    • Base64编码主要用在传输、存储、表示二进制领域,不能算得上加密,只是无法直接看到明文。也可以通过打乱Base64编码来进行加密。
    • 中文有多种编码(比如:utf-8、gb2312、gbk等),不同编码对应Base64编码结果都不一样。

    延伸

    上面我们已经看到了Base64就是用6位(2的6次幂就是64)表示字符,因此成为Base64。同理,Base32就是用5位,Base16就是用4位。大家可以按照上面的步骤进行演化一下。

    Java 验证

    最后,我们用一段Java代码来验证一下上面的转换结果:

    package com.secbro2.blog.utils;
    
    import sun.misc.BASE64Encoder;
    
    /**
     * @author zzs
     */
    public class Base64Utils {
    
    	public static void main(String[] args) {
    		String man = "Man";
    		String a = "A";
    		String bc = "BC";
    
    		BASE64Encoder encoder = new BASE64Encoder();
    		System.out.println("Man base64结果为:" + encoder.encode(man.getBytes()));
    		System.out.println("BC base64结果为:" + encoder.encode(bc.getBytes()));
    		System.out.println("A base64结果为:" + encoder.encode(a.getBytes()));
    	}
    }
    

    打印结果为:

    Man base64结果为:TWFu
    BC base64结果为:QkM=
    A base64结果为:QQ==
    

    以上结果与我们分析所得完全一致。

    精品SpringBoot 2.x视频教程

    《Spring Boot 2.x 视频教程全家桶》精品Spring Boot 2.x视频教程,打造一套最全的Spring Boot 2.x视频教程。


    程序新视界

    公众号“程序新视界”,一个让你软实力、硬技术同步提升的平台

    csdn-微信公众号

    展开全文
  • 撸码字体大部分人喜欢 YaHei Consolas Hybrid,个人因为钟意 Mac 的原因,所以在 Windows 上也更喜欢 Monaco 英文字体,无奈网上也没有一个合适的混合字体,于是自己捣鼓两天,出来两个解决方案。 方案一 —— ...

      撸码字体大部分人喜欢 YaHei Consolas Hybrid,个人因为钟意 Mac 的原因,所以在 Windows 上也更喜欢 Monaco 英文字体,无奈网上也没有一个合适的混合字体,于是自己捣鼓两天,弄出来两个解决方案。

    方案一 —— FontLink/SystemLink

    • 下载 YaHei + Monaco FontLink,先导入注册表【导入注册表仅限 Windows 10 用户】

    • 删掉以前版本的 Monaco 字体(如果有)

    • 打开 Monaco.ttf 安装

    • 重启生效。

      上面说到注册表仅限 Windows 10 的原因是因为 Windows 10 下的雅黑字体文件名是 MSYH.TTC
      如果是非 Windows 10 用户,regedit 打开注册表编辑器,展开 HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink,新建“多字符串值”,名称为“Monaco”,数据部分参考“Segoe UI”的值,一般会有类似如下部分。Win7/8 不知道是 MSYH.TTF 还是什么,要根据自身情况修改。

      MSYH.TTC,Microsoft YaHei UI,205,136
      MSYH.TTC,Microsoft YaHei UI
      

      然后复制到“Monaco”的值,将 128,96 修改为 205,136 确定重启即可。

    方案二 —— YaHei Monaco Hybird 字体

    • 吐血修改而出,不知道有什么 BUG 没,先用着。【网友反馈 BUG 极多,什么时候想起来再修改吧,真的太忙了】

    • 预览:README 预览及说明

    • 地址:YaHei-Monaco-Hybrid-Font

    • 下载 Compressed File 下面的 YaHeiMonacoHybrid.zip 即可。

    展开全文
  • KMP算法—终于全部懂了

    万次阅读 多人点赞 2019-03-22 21:00:45
    所以才有了这句 k = next[k],如果新的一轮循环(这时 k = next[k] ,j 不变)中 t[j] 依然不等于 t[k] ,则说明倒数第二大 t[0~next[k]-1] 也不行,那么 k 会继续被 next[k] 赋值(这就是所谓的 k 回退…),直到...
  • ttf字体文件抽取自己想要的

    万次阅读 2017-04-14 21:31:15
    说明】游戏中经常需要用到各种字体,但是网上下载的TTF字体文件最小也有好几兆,要是游戏中需要用到几种字体,那简直不能忍。通常情况下,我们会用BMFont代替TTF字体,BMFont也有着很多的优势,但是缺点也很明显,...
  • C/C++文字常量与常变量

    千次阅读 2015-06-10 22:56:58
    在C/C++编程时,经常遇到以下几个概念:常量、文字常量、符号常量、字面常量、常变量、字符串常量和字符常量,网上博客资料也是千篇千律,不尽相同,得大家云里雾里。本文将尝试为大家捋清楚以上易混淆概念的定义...
  • 彻底懂 Unicode 编码

    万次阅读 多人点赞 2017-12-26 10:37:26
    于是,我开始在网上找资料,决心彻底明白 Unicode 编码。 ASCII码 在学校学 C 语言的时候,了解到一些计算机内部的机制,知道所有的信息最终都表示为一个二进制的字符串,每一个二进制位有 0 和 1 两种状态,...
  • 单片机 数字电压表(ADC0809)

    万次阅读 多人点赞 2018-06-02 11:42:44
    以下例子是:按键设置最高电压,当前电压大于等于最高电压时蜂鸣器报警以及LED亮,测试环境为Win10 电压为20V的可以自己设置的,上下限值同时设置暂时没好(感觉引脚不够用,需要复用引脚) 例子打包:链接: ...
  •  相信大家看到很多大神的博客,都是要自己编译TensoFlow的so库和jar包,说实在的,这个过程真TM麻烦,反正我了半天都没成功过,然后放弃了……。本博客的移植方法不需要安装Bazel,也不需要构建TensoFlow的so库和...
  • Java实现数字密码发生器

    万次阅读 多人点赞 2019-07-26 22:32:15
    如果写在纸上,担心纸张被别人发现或丢了… 这个程序的任务就是把一串拼音字母转换为6位数字(密码)。我们可以使用任何好记的拼音串(比如名字,王喜明,就写:wangximing)作为输入,程序输出6位数字。 变换的过程...
  • 银行账户管理系统详细设计说明

    万次阅读 多人点赞 2016-06-06 23:02:20
    软件开发小组的产品实现成员应该阅读和参考本说明进行代码的编写、测试。 1.2 背景 说明: A、 软件系统的名称:银行账户管理系统 B、 开发者:魏晓蕾等 本项目将实现基于服务器端Java Web网站的...
  • 前面我在《2万硬核剖析网页自定义字体解析》一文中,讲解了通过图像识别来解析自定义字体,但是图像识别的缺点在于准确率并不能达到100%,还需要二次修改。 前面将字体的称为点阵图,其实根据TrueType字体实际采用...
  • UGUI运用美术字体

    千次阅读 2016-02-27 14:52:24
    在游戏的制作中,美术的运用是美化游戏的常用手段。比如普攻,暴击打出的战斗飘就常常利用不同的美术来做出区别。那么在Unity中如何把美术运用起来呢?且看下文: 1、道具准备。 BMFont:位图字体制作工具。...
  • 在开发中遇到了一个问题,需要一个小图标和图标的说明文字,放在一行显示。 了半天,终于出来了。大致的设置如下: 在html中,图片和文字的设置如下:      通过    驳回  
  • 一开始还以为是电脑问题,就重启了3遍,还没好。 后来研究了一阵,发现这个不是问题,是因为不小心开启了笔记本的小键盘的原因。不敢独享,就把相关解决方法与IT学院站的网友一起分享。 解决方法: 用Fn键...
  • from aip import AipSpeech """ 你的 APPID AK SK """ APP_ID = '你的 App ID' API_KEY = '你的 Api Key' SECRET_KEY = '你的 Secret Key' client = AipSpeech(APP_ID, API_KEY, SECRET_KEY) 2.2 请求说明实例 看到...
  • 这图是个查询所得的结果集,现在的需求是如果企业名称中有中文字号的,就把企业名称中这些中文字号的标红!![图片说明](https://img-ask.csdn.net/upload/201510/08/1444267198_784464.png) 求解,该怎么!谢谢...
  • 神经网络实现手写数字识别(MNIST)

    万次阅读 多人点赞 2017-05-10 18:20:42
    神经网络实现迷宫游戏的思路,在本篇当中也写如何使用神经网络实现迷宫的,但是研究了一下, 感觉有些麻烦不太好,所以就选择了比较常见的方式,实现手写数字识别(所谓的MNIST)。 二、人工神经网络简介 ...
  • 需求:使用html画一个圆,圆中有个进行说明,并且使居中。分析:首先画圆,我第一个想法是用图片,,被骂了一顿,然后想难道用canvas画,又被骂了一顿,这才注意到CSS存在一个属性border-radius。border-radius...
  • 对于概率论数字特征的理解

    万次阅读 多人点赞 2017-04-07 15:47:39
    数字特征概述 随机变量 常见数字特征 数学期望均值 ...要回答这个问题,先得清楚什么是特征。特征是一个客体或一组客体特性的抽象结果。特征是用来描述概念的。任一客体或一组客体都具有众多特性,
  • 4. 按照安装程序说明进行操作。 注: 当安装程序提示输入网络地址时,请输入您在启动安装程序之前打印的配置页上列出的 IP 地址,或在网络上搜索产品。 5. 完成安装过程,然后重新启动计算机。 IP 地址 可手动设置...
  • 9个免费可商用的字体推荐

    万次阅读 2019-07-29 23:17:02
    原文链接:  https://dsx2016.com/?p=547 字体导图 ...不少设计师和企业都吃过版权的亏,收到律师函,遭到罚款. ...明白是设计师免费还是全部场景免费 ...尤其是涉及到商业,一定要查证官方说明
  • 捣腾数字签名

    万次阅读 2013-06-23 22:12:29
    在这里我还明白了:虽然加密和数字签名这两种手段都可以基于同样的公钥密码系统,但它们的目的和工作流程是不一样的——前者是防窃听,后者是验真伪。    接下来就是捣腾Windows上的数字签名工具,实践...
  • 软件不需要安装,直接双击打开就可以用,废话不多说直接上图好了,方便说明问题 前段时间有人跟我讲说要批量图片(批量名片识别、批量照片识别等)识别,然后就下来研究了一下 可以支持单页图片识别、打开一个...
  • java ee中常用jar包说明

    千次阅读 2012-08-21 16:36:49
    在java ee的开发中,jar文件是工程的基础,下面转载了网上兄弟一篇文章,简单介绍了一下,java ee中常用的jar文件的说明: activation.jar:与javaMail有关的jar包,使用javaMail时应与mail.jar一起加入到lib中去,...
  • vue中实现输入框禁止输入...vue为input,textarea等输入类型的了个双向绑定v-model。 双向绑定的数据,父子组件的值是相同的。所以为了保证父子组件v-model的值相同,每当input标签的value改变后,我们还需要改变...
  • Unity3D显示中文字体

    千次阅读 2013-08-15 15:25:00
    当我们运行的时候,有的童鞋会发现字体不清晰,这个问题我也了很久才好了,如果你觉得字体比较细,想加粗点,那么你可以在第二步的时候把Bold打钩,outline thickness的值增大为2 ++;我们在设置一下导入unity中...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 100,238
精华内容 40,095
关键字:

弄字说明