初始化

java AES加密

情到浓时终转凉″ 提交于 2020-03-08 05:35:08
对称加密算法 定义:在对称加密算法中,数据发信方将明文( 原始数据 )和加密 密钥 (mi yue)一起经过特殊加密算法处理后,使其变成复杂的加密密文发送出去。收信方收到密文后,若想解读原文,则需要使用加密用过的 密钥 及相同算法的逆算法对密文进行解密,才能使其恢复成可读明文。在对称加密算法中,使用的 密钥 只有一个,发收信双方都使用这个密钥对数据进行加密和解密,这就要求解密方事先必须知道加密密钥。 优点:算法公开、计算量小、加密速度快、加密效率高。 缺点: (1)交易双方都使用同样钥匙,安全性得不到保证。 (2)每对用户每次使用对称加密算法时,都需要使用其他人不知道的惟一钥匙,这会使得发收信双方所拥有的钥匙数量呈几何级数增长, 密钥管理 成为用户的负担。对称加密算法在分布式网络系统上使用较为困难,主要是因为 密钥管理 困难,使用成本较高。 AES五种加密模式 电码本模式(ECB) 将整个明文分成若干段相同的小段,然后对每一小段进行加密。 优:操作简单,易于实现;分组独立,易于并行;误差不会被传送。——简单,可并行,不传送误差。 缺:掩盖不了明文结构信息,难以抵抗统计分析攻击。——可对明文进行主动攻击。 密码分组链模式(CBC) 先将明文切分成若干小段,然后每一小段与初始块或者上一段的密文段进行异或运算后,再与密钥进行加密。 优点 :能掩盖明文结构信息,保证相同密文可得不同明文

Servlet的生命周期

走远了吗. 提交于 2020-03-08 00:28:28
原文链接: http://www.yiidian.com/servlet/servlet-lifecycle.html Web容器(如:Tomcat)维护Servlet实例的生命周期。让我们看一下servlet的生命周期: Servlet类加载。 Servlet实例创建。 init方法被调用。 service方法被调用。 调用destroy方法。 如上图所示,Servlet处于三种状态:New新建,Ready就绪和End结束。如果创建了Servlet实例,则Servlet处于新状态。调用init()方法后,Servlet进入就绪状态。在就绪状态下,Servlet执行所有任务。当Web容器调用destroy()方法时,它将转换为结束状态。 1)加载Servlet类 类加载器负责加载Servlet类。当Web容器收到对Servlet的第一个请求时,将加载Servlet类。 2)创建Servlet实例 Web容器在加载Servlet类之后创建Servlet的实例。Servlet实例在Servlet生命周期中仅创建一次。 3)init方法被调用 Web容器在创建Servlet实例后仅调用一次init方法。init方法用于初始化servlet。它是javax.servlet.Servlet接口的生命周期方法。init方法的语法如下: public void init

密码学总结(一)

二次信任 提交于 2020-03-07 23:56:59
一、密码常识 1.1 信息安全面临的问题以及解决方案 记住: 不要过于依赖密码保证信息安全,因为任何密码都会有被破解的一天; 不要使用低强度的密码; 不要使用保密的密码算法; 信息安全是一个系统的问题,密码只是信息安全的一部分; 1.2 加密三要素 明文和密文:加密处理的数据。 秘钥(key):用于生成明文的一串数字。 算法(algorithm):用于解决复杂问题的步骤。从明文生成密文的步骤,也就是加密的步骤,称为“加密算法",而解密的步骤则称为“解密算法"。 1.3 凯撒密码 恺撒密码(Caesar cipher)是一种相传尤利乌斯·恺撒曾使用过的密码。恺撒于公元前100年左右诞生于古罗马,是一位著名的军事统帅。 恺撤密码是通过将明文中所使用的字母表按照一定的字数“平移”来进行加密的。 为了讲解方便,我们用小写字母(a,b,c,…)来表示明文,用大写字母(A,B,C,…)来表示密文。 现在我们将字母表平移3个字母,于是,明文中的a在加密后就变成了与其相隔3个字母的D,以此类推。b变成E,c变成F,d变成G…v变成Y,w变成Z,而x则会回到字母表的开头而变成A,相应地,y变成B,z变成C。通过下图我们可以很容易地理解“平移"的具体工作方式。 比如英文 hello ,加密后的数据变为 KHOOR 。 恺撒密码的解密过程是使用与加密时相同的密钥进行反向的平移操作。比如上面例子

c++注意

可紊 提交于 2020-03-07 18:32:02
1. 内置类型变量是否初始化取决于变量定义的位置,在函数体外定义的变量都初始化为0,在函数体内定义的内置类型变量不能自动初始化,类的话都会自动调用构造函数。 2. C++也可以有嵌套类。 3. const修饰一个类对象可以不用初始化,它会自动调用构造函数进行初始化,而int等就不行。如: 1 const A a; // 会自动调用构造函数对a进行初始化 2 // const int i; // 这里将出错,必须像下面这样初始化 3 const int i = 2; 4. 可以直接显示调用构造函数 类名(); 来创建一个临时类对象,如: 1 class A{ 2 A() {} 3 A operator() (){} 4 }; 5 A a = A()(); 这里A()()使用到了()的操作符重装,感觉这样用挺有新鲜感。 来源: https://www.cnblogs.com/wnarutou/archive/2012/11/19/2778199.html

JVM深入解析

有些话、适合烂在心里 提交于 2020-03-07 14:37:23
Java运行时数据区: Java虚拟机在执行Java程序的过程中会将其管理的内存划分为若干个不同的数据区域,这些区域有各自的用途、创建和销毁的时间,有些区域随虚拟机进程的启动而存在,有些区域则是依赖用户线程的启动和结束来建立和销毁。Java虚拟机所管理的内存包括以下几个运行时数据区域,如图: 1、程序计数器:指向当前线程正在执行的字节码指令。线程私有的。 2、虚拟机栈:虚拟机栈是Java执行方法的内存模型。每个方法被执行的时候,都会创建一个栈帧,把栈帧压人栈,当方法正常返回或者抛出未捕获的异常时,栈帧就会出栈。 (1)栈帧:栈帧存储方法的相关信息,包含局部变量数表、返回值、操作数栈、动态链接 a、局部变量表:包含了方法执行过程中的所有变量。局部变量数组所需要的空间在编译期间完成分配,在方法运行期间不会改变局部变量数组的大小。 b、返回值:如果有返回值的话,压入调用者栈帧中的操作数栈中,并且把PC的值指向 方法调用指令 后面的一条指令地址。 c、操作数栈:操作变量的内存模型。操作数栈的最大深度在编译的时候已经确定(写入方法区code属性的max_stacks项中)。操作数栈的的元素可以是任意Java类型,包括long和double,32位数据占用栈空间为1,64位数据占用2。方法刚开始执行的时候,栈是空的,当方法执行过程中,各种字节码指令往栈中存取数据。 d、动态链接

C语言--疑问解析

别来无恙 提交于 2020-03-07 14:28:16
1.局部变量未初始化值不确定,全局变量初始值为0;(vs2017局部变量不初始化报错) 2.大小端模式问题: 大端模式:高位数据存储在低地址内存单元,数据的低位数保存在高地址内存单元中。即地址由低到高,而数据字节位数由高到低。 小端模式:数据的低位字节保存在高地址内存单元,数据的高字节保存在低地址内存单元中。即地址由低到高,数据字节位数由高到低。 假设变量x的类型为int,位于地址Ox:100,其值为Ox01234567,其地址范围为Ox100~Ox103,其内部数据排列顺序由机器类型决定。 大端模式:Ox100 01, Ox101 23,Ox102 45,Ox103 67 小端模式:Ox100 67, Ox101 45, Ox102 23, Ox103 01 3.# include <string.h> void *memset(void *s, int c, unsigned long n); 函数的功能是:将指针变量 s 所指向的前 n 字节的内存单元用一个“整数” c 替换,注意 c 是 int 型。s 是 void* 型的指针变量,所以它可以为任何类型的数据进行初始化。memset() 的作用是在一段内存块中填充某个给定的值。因为它只能填充一个值,所以该函数的初始化为原始初始化,无法将变量初始化为程序中需要的数据。用memset初始化完后

UITableView中Cell点击展开方法

你说的曾经没有我的故事 提交于 2020-03-07 13:31:17
定义一个属性记录selectedIndexPath用来记录选中的行的indexpath,在视图控制器初始化方法中初始化此属性为nil, 在tableView:didSelectRowAtIndexPath代理方法中: 首先deselect这个行 然后[tableView beginUpdate] if(selectedIndexPath==nil) { selectedIndexPath=indexPath; [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:indexPath] withRowAnimation:UITableViewRowAnimationAutomatic]; } else{ bool hasSelectedOtherRow=![self.selectedIndexPath isEqualTo:indexPath]; NSIndexPath *temp=self.selectedIndexPath; self.selectedIndexPath=nil; [tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:temp] withRowAnimation:UITableViewRowAnimationAutomatic]; if

Kotlin入门学习

不问归期 提交于 2020-03-07 11:06:25
Overview 由于kotlin和Java之间的高兼容性,使得kotlin适用于服务端、客户端、前端以及数据科学等多个领域。同时,从Java转向kotlin的学习曲线也更加平滑。究其本质,kotlin和Java一样都是将源代码编译成字节码,从而可以运行在虚拟机之上。此外,对于服务端开发而言,kotlin支持协程,相比Java中的线程,协程更加轻量级。因此,在硬件资源相等的情况下,使用协程可以大大地提高服务端应用的伸缩性。 kotlin基于内联函数提供Lambda,使得基于kotlin编写的应用程序运行速度更快。 kotlin在语言级别上支持 协程 。因此,基于kotlin提供的协程编写的应用程序用户体验更加流畅,且更具伸缩性。 基础入门 基础语法 包的定义与导入 相比Java,区别在于不需要以分号结尾,同时目录无需和包一一匹配。 变量和常量的定义 需要注意的是,kotlin中存在top-level的变量和常量,在整个kotlin文件中的任何地方都可访问和使用。 var variant_name : variant_type //局部变量必须初始化,全局变量无须初始化 val variant_name : variant_type //局部常量必须初始化,全局变量无须初始化 方法定义 fun function_name ( var_name : var_type , var

类的静态数据成员初始化问题

孤者浪人 提交于 2020-03-07 10:29:08
1. 静态数据成员在类声明中声明,在包含类方法的文件中初始化。初始化时使用作用域运算符来指出静态成员所属的类。但如果静态成员是整形const或枚举型const,则可以在类声明中初始化。 C++ primer plus P426-P427类静态成员的声明和初始化 //strnbad.h class StringBad { private: static int num_strings; … }; //strnbad.cpp int StringBad::num_strings = 0; 不能在类声明中初始化静态成员变量,这是因为声明描述了如何分配内存,但并不分配内存。请注意,初始化语句指出了类型,并使用了作用域运算符,但没有使用关键字static。初始化是在方法文件中,而不是在类声明文件中进行的,如果在头文件中,当头文件被包括在其他几个文件中时,将出现多个初始化副本,从而引发错误。 来源: https://www.cnblogs.com/lakeone/p/5271400.html

MySQL 解压版安装

血红的双手。 提交于 2020-03-07 10:26:03
MySQL 解压版安装 下载zip版mysql解压,进入bin目录下,打开cmd 初始化数据库 mysqld --initialize --console 或者 mysqld --initialize-inscure --console 可以指定数据库目录,使用 --datadir 参数 初始化之后mysqld启动即可 来源: https://www.cnblogs.com/liufengfan/p/12432744.html