Ⅰ 请简述什么是序列密码与分组密码,它们的区别是什么
序列密码(Stream Cipher):
又称流密码,将明文消息按字符逐位进行加密。
分组密码(Block Cipher):
在分组密码中将明文消息分组(每组有多个字符),逐组进行加密。
Ⅱ 什么是流加密
现代的文本加密主要还是对称加密。非对称加密太慢,而且也不适合对全文本加密,所以一般只是用在小数据加密上,比如加密文本对称加密密钥再传给对方。然后文本本身还是用对称加密。非对称加密还有一个用处就是核实发件人身份。
现代主要有两种对称加密,数据流加密和数据块加密。数据流加密就是用算法和密钥一起产生一个随机码流,再和数据流XOR一起产生加密后的数据流。解密方只要产生同样的随机码流就可以了。数据块加密把原数据分成固定大小的数据块(比如64位),加密器使用密钥对数据块进行处理。一般来说数据流加密更快,但块加密更安全一些。常见的加密法里,des和3des是使用最多的数据块加密,aes是更新一些的块加密法,rc4是数据流加密,等等。
二战以后,大家一般都放弃了保护加密算法的做法,因为太难了。而且数学上很强的算法就这么几种。所以现在都是公开算法。这些算法特性都不错,如果一个密钥长度不够强了,只要加长密钥长度就可以了。当然这种改变涉及改变加密硬软件,在使用中有些不便,不过一般认为算法本身还是够强不必改变。
Ⅲ 流动密码是什么
每隔一段时间(一两分钟左右)会自动更改,或者每次刷新会更新的密码
比如现在的网上银行的u盾和网页登陆时输入的验证码都是流动密码
Ⅳ 简述一下流密码的基本概念
流密码也叫序列密码,是一个随时间变化的加密变换。具有转换速度快、低错误传播的优点,硬件实现电路更简单;其缺点是:低扩散(意味着混乱不够)、插入及修改的不敏感性。
Ⅳ 密码技术的流密码
流密码,相对于区块加密,制造一段任意长的钥匙原料,与明文依位元或字符结合,有点类似一次垫(one-time pad)。输出的串流根据加密时的内部状态而定。在一些流密码上由钥匙控制状态的变化。RC4是相当有名的流密码。
密码杂凑函数(有时称作消息摘要函数,杂凑函数又称散列函数或哈希函数)不一定使用到钥匙,但和许多重要的密码算法相关。它将输入资料(通常是一整份文件)输出成较短的固定长度杂凑值,这个过程是单向的,逆向操作难以完成,而且碰撞(两个不同的输入产生相同的杂凑值)发生的机率非常小。
信息认证码或押码(Message authentication codes, MACs)很类似密码杂凑函数,除了接收方额外使用秘密钥匙来认证杂凑值。
Ⅵ 什么是流密码
比如你输入了一个密码 在你这边的一个软件给密码加上其他的乱吗 然后另一边接受以后可以分离出乱吗
反正就是加密手段了
Ⅶ 急求:流密码的算法,用JAVA
Java中的IO流使用的是Decorator设计模式
所以只要写两个装饰者类
覆盖write和read方法
在write前和read后对原数据进行一些处理(比如异或操作)就可以了
我吃过饭写个贴上来……
--------------------------------------------------------
// EncryptStream.java
import java.io.IOException;
import java.io.OutputStream;
/**
*
* 类型描述 加密流
*
* @since 2009-5-22
* @author 何智刚
*
*/
public class EncryptStream extends OutputStream {
private byte key;
private OutputStream out;
/**
*
* @param key 密钥
* @param in 需要加密的流
*/
public EncryptStream(byte key, OutputStream out) {
this.key = key;
this.out = out;
}
@Override
public void write(int b) throws IOException {
out.write(b ^ key);
}
}
// DecryptStream.java
import java.io.IOException;
import java.io.InputStream;
/**
*
* 类型描述 解密流
*
* @since 2009-5-22
* @author 何智刚
*
*/
public class DecryptStream extends InputStream {
private byte key;
private InputStream in;
/**
*
* @param key 密钥
* @param in 需要解密的流
*/
public DecryptStream(byte key, InputStream in) {
this.key = key;
this.in = in;
}
@Override
public int read() throws IOException {
return in.read() ^ key;
}
@Override
public int read(byte[] b, int off, int len) throws IOException {
byte[] temp = new byte[b.length];
int c = in.read(temp, off, len);
for (int i = 0; i < b.length; i++) {
b[i] = (byte) (temp[i] ^ key);
}
return c;
}
}
// Client.java
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
public class Client {
public static void main(String[] args) throws Exception {
byte key = 25;
encryptFile("要加密的文件.dat", "加密过的文件.dat", key);
decryptFile("加密过的文件.dat", "解密出来的文件.dat", key);
}
/**
*
* 方法描述 加密文件
*
* @param src 要加密的文件的路径
* @param des 加密过后的文件的存放路径
* @param key 密钥
* @throws Exception
*
* @变更记录 2009-5-22 下午12:42:25 何智刚 创建
*
*/
public static void encryptFile(String src, String des, byte key)
throws Exception {
InputStream in = new FileInputStream(src);
OutputStream out = new EncryptStream(key, new FileOutputStream(des));
byte[] buf = new byte[8192];
int c;
while ((c = in.read(buf)) > 0) {
out.write(buf, 0, c);
}
in.close();
out.flush();
out.close();
}
/**
*
* 方法描述 解密文件
*
* @param src 要解密的文件的路径
* @param des 解密过后的文件的存放路径
* @param key 密钥
* @throws Exception
*
* @变更记录 2009-5-22 下午12:43:04 何智刚 创建
*
*/
public static void decryptFile(String src, String des, byte key)
throws Exception {
InputStream in = new DecryptStream(key, new FileInputStream(src));
OutputStream out = new FileOutputStream(des);
byte[] buf = new byte[8192];
int c;
while ((c = in.read(buf)) > 0) {
out.write(buf, 0, c);
}
in.close();
out.flush();
out.close();
}
}
-----------------------------------------------
我在例子里没有用BufferedStream,而是自己创建了个byte[]做缓冲区,因为这样性能更好。用BufferedStream的话代码会更简单。
Ⅷ 流密码学及其应用
序列密码
6.1 流密码的基本概念
6.1.1 流密码的基本原理
6.1.2 同步流密码
6.1.3 密钥流产生器
6.2 移位寄存器与移位寄存器序列
6.3 线性反馈移位寄存器的表示
6.3.l 线性反馈移位寄存器的一元多项式表示
6.3.2 线性移位寄存器序列的周期性
6.3.3 线性移位寄存器的序列空间
6.4 线性移位寄存器序列的极小多项式
6.5 m序列的伪随机性
6.6 流密码的破译
6.6.1 流密码中的主要攻击方法
6.6.2 m序列的破译
Ⅸ 分组密码和流密码的差别是什么意思
分组密码与流密码的不同之处在于输出的每一位数字不是只与相应时刻输入的明文数字有关,而是与一组长为m的明文数字
Ⅹ 什么是流密码、自毁生成程序、背包变体、零知识协议以及单一点
数字城堡看多了吧?很多翻译都是很生硬的,不知道译都怎么翻译的。
流密码又称序列密码,它是将明文消息字符串逐位地加密成密文
自毁生成程序不知道
背包变体也不知道,嘿嘿
零知识证明是一种协议。所谓协议(Protocol),就是两个或两个以上的参与者为完成某项特定的任务而采取的一系列步骤,包括以下三个特征:
1. 协议自始至终是有序的过程,每一步骤必须依次执行,在前一步骤没有执行完之前,后面的步骤不可能执行。
2. 协议至少需要两个参与者,一个人可以通过执行一系列的步骤来完成某项任务,但它不构成协议。
3. 通过执行协议必须能够完成某项任务。
零知识证明必须包括两个方面,一方为证明者,另一方为验证者。证明者试
图向验证者证明某个论断是正确的,或者证明者拥有某个知识,却不向验证者透露任何有用的消息。零知识证明目前在密码学中得到了广泛的应用,尤其是在认证协议、数字签名方面,人们利用数字签名设计出了大量优良的算法。
用一个关于洞穴的故事来解释零知识。洞穴中有一个秘密,知道咒语的人能打开 C 和D之间的密门,对其它人来说,两条通道都是死胡同。Peggy 知道这个洞穴的秘密。她想对 Victor 证明这一点,但也不想泄露咒语。
下面是她如何使 Victor 相信的过程:
(1) Victor 站在A点。
(2) Peggy 一直走进洞穴,到达C点或者D点。
(3) 在 Peggy 消失在洞穴中后,Victor 走到B点。
(4) Victor 向 Peggy 喊叫,要她:从左通道出来,或者从右通道出来。
(5) Peggy 答应了,如果有必要她就用咒语打开密门。
Peggy 和 Victor 重复第(1)至第(5)步 n 次。
假设 Victor 有一个摄像机能记录下他所看到的一切。他记录下 Peggy 消失在洞中情景,记录下他喊叫 Peggy 从他选择的地方出来的时间,记录下 Peggy 走出来。他记录下所有的 n 次试验。如果他把这些记录给 Carol 看,她会相信 Peggy知道打开密门的咒语吗?肯定不会。在不知道咒语的情况下,如果Peggy和Victor事先商定好 Victor 喊叫什么,那将如何呢?Peggy 会确信也走进 Victor 叫她出来那条路,然后她就可以在不知道咒语的情况下在 Victor 每次要她出来的那条路上出来。或许他们不那么做,Peggy 走进其中一条通道,Victor 发出一条随机的要求。如果 Victor 猜对了,好极了。如果他猜错了,他们会从录像中删除这个试验。总之,Victor 能获得一个记录,它准确显示与实际证明 Peggy 知道咒语的相同的事件顺序。
这说明了两件事。其一是 Victor 不可能使第三方相信这个证明的有效性;其二,它证明了这个协议是零知识的。在 Peggy 不知道咒语的情况下,Victor 显然是不能从记录中获悉任何信息。但是,因为无法区分一个真实的记录和一个伪造的记录,所以 Victor 不能从实际证明中了解任何信息-它必是零知识。也就是说,Peggy 在向 Victor 证明的过程中没有泄露任何有关秘密的知识,称为零知识。
后面那个更不知道了。
原文分别是这些
stream ciphers
self-decimated generators
knapsack variants
zero knowledge protocols
unicity points
应该都是密码学里的术语的。不好意思不能帮你,我也不清楚。