无用挂件

一些不是很有用的东西

2015-12-02 | 阅读

加密算法常见的填充方式

  1. 填充数据为填充字节序列的长度.一个字节可以表示的长度是256,256字节就是 256 x 8 = 2048位,现在看来,很长一段时间内的加密算法不会将加密块的大小超过2048,所以该填充是合理足够的.如果加密块为256位,也就是32字节,如果当前有15字节,则之后填充17个 0x17.
  2. 填充数据为一个0x80后加n个0x00.
  3. 填充数据的最后一个字节为填充字节序列的长度.
  4. 填充数据位空格,空格为0x20 .
  5. 填充数据位0x00. 未填充的情况时,最后n位正好为0x00.同上,已填充时也不安全.

所以,综上所述,不可能有完美的填充方法,以使填充后可以从未填充和已填充的数据中都能得到真实的数据.

而解决方法是,对于完整地数据,也进行填充,这样就消灭了这个问题,全部都是进行填充的情况了.而选择加密方式,123三种情况可以使用.

ElGamal非对称加密算法

ElGamal算法,是一种较为常见的加密算法,它是基于1984年提出的公钥密码体制和椭圆曲线加密体系。既能用于数据加密也能用于数字签名,其安全性依赖于计算有限域上离散对数这一难题。在加密过程中,生成的密文长度是明文的两倍,且每次加密后都会在密文中生成一个随机数K,在密码中主要应用离散对数问题的几个性质:求解离散对数(可能)是困难的,而其逆运算指数运算可以应用平方-乘的方法有效地计算。也就是说,在适当的群G中,指数函数是单向函数。

密钥对产生办法。

首先选择一个素数p,获取一个素数p的一个原根g(若g模p的阶等于φ(m),则称a为模m的一个原根。(其中φ(m)表示m的欧拉函数)) 和一个随机数x,且g和 x 均小于 p, 计算 y = g^x ( mod p ),则其公钥为 y, g 和p。私钥是x。g和p可由一组用户共享。

ElGamal用于加密。被加密信息为M,首先选择一个随机数k,k与 p - 1互质,计算

a = g^k ( mod p )
b = y^k M ( mod p )

( a, b )为密文,是明文的两倍长。解密时计算

M = b / a^x ( mod p )

ElGamal签名的安全性依赖于乘法群(IFp)* 上的离散对数计算。素数p必须足够大,且p-1至少包含一个大素数

因子以抵抗Pohlig & Hellman算法的攻击。M一般都应采用信息的HASH值(如SHA算法)。ElGamal的安全性主要依赖于p和g,若选取不当则签名容易伪造,应保证g对于p-1的大素数因子不可约。

欧拉函数是神马: 在数论,对正整数n,欧拉函数是少于n的数中与n互质的数的数目.

UML类图的几种关系

  • 泛化Generalization : 为继承关系,子类指向父类,为带三角形的实线.
  • 实现Realization : 类实现接口,具体类指向接口,为带三角形的虚线.
  • 关联Association : 拥有关系,A类拥有B类,且知道B类的属性和方法.关联可以是单向的,也可以使双向的.双向的关联可以有两个箭头或者没有箭头,单向的关联有一个箭头.当然也可以自己关联自己.
  • 聚合Aggregation : 为整体与部分的关系,聚合为一种强的关联,如人与人群, 但是无法很想详细的区分.为带空心菱形的实现,菱形指向整体.
  • 组合Composition : 也是整体与部分的关系,但是部分不能离开本体,比聚合还要强的关联关系,整体负责部分对象的生命周期.为带实心菱形的实线,指向整体.
  • 依赖Despendency : 是一种使用关系,即一个类的实现需要另一个类的协助,且不双向依赖.为带箭头的虚线,指向被依赖的对象.

强弱关系为 泛化=实现>组合>聚合>关联>依赖.

计算科学中的两大世界难题

命名和缓存失效.

关于开源协议,有下图:

开源协议

在安卓浏览器中可以点击Li事件,但是Safari中无法点击

safari中对对点击事件做了一些处理,譬如对于Li标签的点击事件,不能用touch,不能用click,用上tap才能正常点击.

RSA加密算法的原理是

n 为两个大质数p和q的乘积 ,二进制位数为密钥长度 e1和e2是一堆相关值, e1任意取,一般为65537 然后

(e2 * e1) mod ((p-1) * (q-1)) = 1

(n,e1) 是公钥 , (n,e2)是私钥.

加解密算法相同,若A为明文,B为密文

A = B ^ e2 mod n ;
B = A ^ e1 mod n ;

C++属于面向对象编程里的Simula 67(一种早期OO语言)学派,而Objecive-C属于Smalltalk学派。

在C++里,对象的静态类型决定你是否可以发送消息给它,而对Objective-C来说,由动态类型来决定。Simula 67学派更安全,因为大部分错误可以在编译时查出。 而Smalltalk学派更灵活,比如一些Smalltalk看来无误的程序拿到Simualr67那里就无法通过。

从很多方面来看,C++和Objective-C的差别,与其说是技术上的, 不如说是思维方式上的。你是否想更安全而舍弃灵活性?Simular67学派的支持者称既然程序设计出色何必再要灵活性,而 Smalltalk学派则称为了灵活可以容忍运行时多出错。