导航:首页 > 文档加密 > 范围内随机的加密

范围内随机的加密

发布时间:2022-12-22 06:23:49

‘壹’ 概率加密和Goldwasser-Micali密码系统

注:以下内容出自《An Introction to Mathematical Cryptography》3.10 Probabilistic Encryption and the Goldwasser–Micali Cryptosystem一节。

假如Alice使用公钥密码系统向Bob发送信息,如比特0或1。在该场景下,这样的方式可能是不安全的。偷听者Eve可以加密两个可能的明文 m = 0 和 m = 1,然后将加密值与 Alice 的密文进行比较。更一般地说,在任何一个密码系统中,如果它可能的明文集合很小,那么Eve 总是可以使用 Bob 的公钥加密各个明文,然后找到和Alice发送的一样的密文。

所谓的概率加密(Probabilistic encryption)是由Goldwasser 和 Micali 发明的针对上述问题的加密方法。其想法是 Alice 选择一个明文 m 和一个随机数据r,然后使用 Bob 的公钥加密 (m,r)对。理想情况下,当 r 选遍所有可能的值, 的加密值将“随机”选遍可能的密文。更准确地说,对于任何固定的 和 以及变化的 ,对下面两个量的值在分布上应该是不可区分的:

注意,Bob 在进行解密时没有必要恢复完整的 对,他只需要恢复明文 即可。

上面这个想法的思路是很清晰的,但是如何创造一个实际可行的概率加密方案呢?Goldwasser 和 Micali 描述了一种方案,虽然不实用(因为它一次只加密 1 位),但其 具有易于描述和分析 的优点。 他们的想法基于以下的困难问题:

设 和 是需要保密的两个不同的素数;令 ,并公开 ;给定一个整数 ,判断 是否是模 的一个二次剩余,即判断同余方程 是否可解。

我们注意到,由于Bob知道如何分解 ,他可以方便的计算: 是模 的二次剩余,当且仅当 是模 的二次剩余而且 也是模 的二次剩余。而对于 ,由于她只知道 ,即使她计算 对 的Jacob符号,仍然无法知道 是否是模 的二次剩余。

Goldwasser 和 Micali 利用这一事实, 创建了下表描述的概率公钥密码系统。

该方案易于验证:

因为Alice随机选取 ,当Alice加密明文 时,可以选遍模N的二次剩余;当Alice加密明文 时,可以选遍模N的二次非剩余(且该数对 的Jacob符号为1)。这样的话,即使Eve计算 对 的Jacob符号,仍无法获得任何有用的信息,如下:

即无法判断同余方程 是否可解。

来看一个例子,Bob通过以下参数创建Goldwasser–Micali公钥:

可以确认 。Bob公开 作为公钥,保留 。

如果Alice要发送的明文比特 ,她首选在[1,13048158]范围内随机选取 。然后计算

,并将密文 发送给Bob。Bob通过计算 对 的Legendre符号,即 ,即可知明文 。

之后,Alice继续发送 。同样先随机选取 ,然后计算

,并将密文 发送给Bob。Bob通过计算 对 的Legendre符号,即 ,即可知明文m=1。

按照这样的方式,如果Alice再次发送明文 ,随机选取r之后计算

可以看到,前后两次发送的 的密文是完全没有相关性的。

注:

Goldwasser-Micali 公钥密码系统其实不实用,因为明文的每一位都模 N 加密。为了安全,要保证 Eve 不能有效分解 ,所以 N 至少是一个 1000 位bit长的数。 这样,如果 Alice 想向 Bob 发送 位长度明文,她的密文将有 位长。因此,Goldwasswer-Micali 公钥密码系统的密文膨胀率为 1000。一般来说,Goldwasswer-Micali 公钥密码系统的密文膨胀率为 。

存在其他密文膨胀率小得多的的概率公钥加密系统。比如Elgamal公钥加密系统。

‘贰’ 数据结构或算法分析,一串随机字符的加密或编码方式

linux的uuid码也是有内核提供的,在/proc/sys/kernel/random/uuid这个文件内。其实,random目录,里面还有很多其它文件,都与生成uuid有关系的。
1 [chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid
2 dff68213-b700-4947-87b1-d9e640334196
3 [chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid
4 7b57209a-d285-4fd0-88b4-9d3162d2e1bc
5 #连续2次读取,得到的uuid是不同的
6
7 [chengmo@centos5 ~/shell]$ cat /proc/sys/kernel/random/uuid| cksum | cut -f1 -d" "
8 2141807556
9 #同上方法得到随机整数

这是linux。

‘叁’ 如何在C语言中生成一定范围内的随机数

#include <stdlib.h>
#include <stdio.h>
#include <time.h>
srand()((int)time(NULL));设定随机数种子
rand()()%100;产生0-99的随机数。高级点的,假如要产生16-59之间的数,你可以这样写:rand()()%44+16(这里44由59-16+1得到)。其他情况如法炮制!
各种编程语言返回的随机数(确切地说是伪随机数)实际上都是根据递推公式计算的一组数值,当序列足够长,这组数值近似满足均匀分布。如果计算伪随机序列的初始数值(称为种子)相同,则计算出来的伪随机序列就是完全相同的。这个特性被有的软件利用于加密和解密。加密时,可以用某个种子数生成一个伪随机序列并对数据进行处理;解密时,再利用种子数生成一个伪随机序列并对加密数据进行还原。这样,对于不知道种子数的人要想解密就需要多费些事了。当然,这种完全相同的序列对于你来说是非常糟糕的。要解决这个问题,需要在每次产生随机序列前,先指定不同的种子,这样计算出来的随机序列就不会完全相同了。你可以在调用rand()函数之前调用srand( (unsigned)time( NULL ) ),这样以time函数值(即当前时间)作为种子数,因为两次调用rand函数的时间通常是不同的,这样就可以保证随机性了。你也可以使用srand函数来人为指定种子数。
参考资料:http://..com/question/132839023.html

‘肆’ 如何对文件进行加密,然后是随机密码,给一个cdk号码,因为cdk不一样,可以生成不同的密码。

加壳加密就可以实现的,随机生成注册码,方便快捷

‘伍’ 计算机密码学中有哪些加密算法

、信息加密概述

密码学是一门古老而深奥的学科,它对一般人来说是莫生的,因为长期以来,它只在很少的范围内,如军事、外交、情报等部门使用。计算机密码学是研究计算机信息加密、解密及其变换的科学,是数学和计算机的交义学科,也是一门新兴的学科。随着计算机网络和计算机通讯技术的发展,计算机密码学得到前所未有的重视并迅速普及和发展起来。在国外,它已成为计算机安全主要的研究方向,也是计算机安全课程教学中的主要内容。

密码是实现秘密通讯的主要手段,是隐蔽语言、文字、图象的特种符号。凡是用特种符号按照通讯双方约定的方法把电文的原形隐蔽起来,不为第三者所识别的通讯方式称为密码通讯。在计算机通讯中,采用密码技术将信息隐蔽起来,再将隐蔽后的信息传输出去,使信息在传输过程中即使被窃取或载获,窃取者也不能了解信息的内容,从而保证信息传输的安全。

任何一个加密系统至少包括下面四个组成部分:

( 1)、未加密的报文,也称明文。

( 2)、加密后的报文,也称密文。

( 3)、加密解密设备或算法。

( 4)、加密解密的密钥。

发送方用加密密钥,通过加密设备或算法,将信息加密后发送出去。接收方在收到密文后,用解密密钥将密文解密,恢复为明文。如果传输中有人窃取,他只能得到无法理解的密文,从而对信息起到保密作用。

二、密码的分类

从不同的角度根据不同的标准,可以把密码分成若干类。

(一)按应用技术或历史发展阶段划分:

1、手工密码。以手工完成加密作业,或者以简单器具辅助操作的密码,叫作手工密码。第一次世界大战前主要是这种作业形式。

2、机械密码。以机械密码机或电动密码机来完成加解密作业的密码,叫作机械密码。这种密码从第一次世界大战出现到第二次世界大战中得到普遍应用。3、电子机内乱密码。通过电子电路,以严格的程序进行逻辑运算,以少量制乱元素生产大量的加密乱数,因为其制乱是在加解密过程中完成的而不需预先制作,所以称为电子机内乱密码。从五十年代末期出现到七十年代广泛应用。

4、计算机密码,是以计算机软件编程进行算法加密为特点,适用于计算机数据保护和网络通讯等广泛用途的密码。

(二)按保密程度划分:

1、理论上保密的密码。不管获取多少密文和有多大的计算能力,对明文始终不能得到唯一解的密码,叫作理论上保密的密码。也叫理论不可破的密码。如客观随机一次一密的密码就属于这种。

2、实际上保密的密码。在理论上可破,但在现有客观条件下,无法通过计算来确定唯一解的密码,叫作实际上保密的密码。

3、不保密的密码。在获取一定数量的密文后可以得到唯一解的密码,叫作不保密密码。如早期单表代替密码,后来的多表代替密码,以及明文加少量密钥等密码,现在都成为不保密的密码。

(三)、按密钥方式划分:

1、对称式密码。收发双方使用相同密钥的密码,叫作对称式密码。传统的密码都属此类。

2、非对称式密码。收发双方使用不同密钥的密码,叫作非对称式密码。如现代密码中的公共密钥密码就属此类。

(四)按明文形态:

1、模拟型密码。用以加密模拟信息。如对动态范围之内,连续变化的语音信号加密的密码,叫作模拟式密码。

2、数字型密码。用于加密数字信息。对两个离散电平构成0、1二进制关系的电报信息加密的密码叫作数字型密码。

(五)按编制原理划分:

可分为移位、代替和置换三种以及它们的组合形式。古今中外的密码,不论其形态多么繁杂,变化多么巧妙,都是按照这三种基本原理编制出来的。移位、代替和置换这三种原理在密码编制和使用中相互结合,灵活应用。

‘陆’ 如何在Linux中产生,加密或解密随机密码

1. 使用命令 pwgen 来生成一个长度为 10 个字符的独特的随机密码。假如你还没有安装 pwgen,请使用 Apt 或 YUM 等包管理器来安装它。
$ pwgen 101
生成一个独特的随机密码
一口气生成若干组长度为 50 个字符的唯一的随机密码!
$ pwgen 50
生成多组随机密码
2. 你还可以使用 makepasswd 来每次生成一个给定长度的独特的随机密码。在你把玩 makepasswd 命令之前,请确保你已经安装了它。如若没有安装它,试试使用 Apt 或 YUM 包管理器来安装 makepasswd这个软件包。
生成一个长度为 10 个字符的随机密码。该命令产生的密码的长度默认为 10。
$ makepasswd
使用 makepasswd 生成独特的密码
生成一个长度为 50 个字符的随机密码。
$ makepasswd --char50
生成长度为 50 的密码
生成 7 个长度为 20 个字符的随机密码。
$ makepasswd --char20--count 7
3. 使用带“盐”的 Crypt(注:这里应该指的是一个函数,可以参考这里 ) 来加密一个密码。提供手动或自动添加 “盐”。
对于那些不清楚 盐 的意义的人,这里的 “盐” 指的是一个随机数据,它作为密码生成函数的一个额外的输入, 目的是保护密码免受词典攻击。
在执行下面的操作前,请确保你已经安装了 mkpasswd。
下面的命令将带 “盐” 加密一个密码。“盐” 的值是随机自动生成的。所以每次你运行下面的命令时,都将产生不同的输出,因为它每次接受了随机取值的 “盐”。
$ mkpasswd tecmint
使用 Crypt 来加密密码
现在让我们来手动定义 “盐” 的值。每次它将产生相同的结果。请注意你可以输入任何你想输入的值来作为 “盐” 的值。
$ mkpasswd tecmint -s tt
带“盐”加密密码
另外, mkpasswd 还是交互式的,假如你在命令中没有提供密码,它将主动询问你来输入密码。
4. 使用 aes-256-cbc 加密算法并使用带“盐”的密码(如 “tecmint”) 加密一个字符串(如 “Tecmint-is-a-Linux-Community”)。
# echo Tecmint-is-a-Linux-Community | openssl enc -aes-256-cbc -a -salt -pass pass:tecmint
在 Linux 中加密一个字符串
在上面例子中, echo 命令的输出通过管道传递给了 openssl 命令,使得该输出通过加密编码方式(enc:Encoding with Cipher ) 所加密,这个过程中使用了 aes-256-cbc 加密算法,并附带了密码 (tecmint) 和 “盐” 。
5. 使用 openssl 命令的 -aes-256-cbc 解密选项来解密上面的字符串。
# echo U2FsdGVkX18Zgoc+/Z | openssl enc -aes-256-cbc -a -d -salt -pass pass:tecmint
在 Linux 中解密字符串
现在就是这些内容了。

‘柒’ 如何在 Linux 中产生,加密或解密随机密码

给文件加密,我使用的是超级加密3000. 超级加密3000采用国际上成熟的加密算法和安全快速的加密方法,可以有效保障数据安全! 具体操作方法: 1 下载安装超级加密3000。 2 然后在需要加密的文件上单击鼠标右键选择加密。

‘捌’ 如何用c语言产生一定范围内的随机数

利用srand((unsigned int)(time(NULL))是一种方法,因为每一次运行程序的时间是不同的。

在C语言里所提供的随机数发生器的用法:现在的C编译器都提供了一个基于ANSI标准的伪随机数发生器函数,用来生成随机数。它们就是rand()和srand()函数。这二个函数的工作过程如下:

1) 首先给srand()提供一个种子,它是一个unsigned int类型,其取值范围从0~65535;

2) 然后调用rand(),它会根据提供给srand()的种子值返回一个随机数(在0到32767之间)

3) 根据需要多次调用rand(),从而不间断地得到新的随机数;

4) 无论什么时候,都可以给srand()提供一个新的种子,从而进一步“随机化”rand()的输出结果。

下面是0~32767之间的随机数程序:

#include <stdlib.h>

#include <stdio.h>

#include <time.h> // 使用当前时钟做种子

void main(void)

{int i;

srand((unsigned)time( NULL ) ); // 初始化随机数

for(i = 0; i < 10;i++) // 打印出 10 个随机数

printf("%d ", rand() );

}

根据上面的程序可以很容易得到0~1之间的随机数:

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

int main( )

{int i;

srand((unsigned)time( NULL ) );

for(i = 0; i < 10;i++)

printf("%5.2f ", rand()/32767.0);

}

而产生1~100之间的随机数可以这样写:

#include <stdlib.h>

#include <stdio.h>

#include <time.h>

int main( )

{int i;

srand((unsigned)time( NULL ) );

for(i = 0; i < 10;i++)

printf("%d ", rand()%100+1);

}

(8)范围内随机的加密扩展阅读:

C语言高效编程技巧:

一:以空间换时间

计算机程序中最大的矛盾是空间和时间的矛盾,那么,从这个角度出发逆向思维来考虑程序的效率问题

二:数学方法解决问题

数学是计算机之母,没有数学的依据和基础,就没有计算机发展,所以在编写程序的时候,采用一些数学方法会对程序的执行效率有数量级的提高。

三:使用位操作

实现高效的C语言编写的第三招----使用位操作,减少除法和取模的运算。

在计算机程序中,数据的位是可以操作的最小数据单位,理论上可以用“位运算”来完成所有的运算和操作。一般的位操作是用来控制硬件的,或者做数据变换使用,但是,灵活的位操作可以有效提高程序运行的效率。

阅读全文

与范围内随机的加密相关的资料

热点内容
python爬虫很难学么 浏览:572
小米解压积木可以组成什么呢 浏览:816
为什么滴滴出行app还能用 浏览:564
怎么升级手机android 浏览:922
php权威编程pdf 浏览:994
扣扣加密技巧 浏览:720
苹果如何创建服务器错误 浏览:495
软考初级程序员大题分值 浏览:473
js压缩视频文件 浏览:578
linux如何通过命令创建文件 浏览:989
应用加密app还能访问应用嘛 浏览:433
安卓怎么用支付宝交违章罚款 浏览:665
php面向对象的程序设计 浏览:504
数据挖掘算法书籍推荐 浏览:894
投诉联通用什么app 浏览:152
web服务器变更ip地址 浏览:955
java正则表达式验证邮箱 浏览:362
成熟商务男装下载什么软件app 浏览:610
加密2h代表长度是多少厘米 浏览:23
拍卖程序员 浏览:103