n=4%%%设定允许输入密码的次数即可。
一、需要对数据进行加密解密,而Hill密码学作为以现行代数和矩阵为基础的密码学,对于处在大学的我们是具有相当价值的。实际应用中通过手工破译密码是相当困难的,本文借助了Matlab的推导与计算功能,编写了相应的程序,准确快速的实现了HiLL密码的加密、解密与破译的工作,使其在实际中得到推广。
二、密码学的发展久远大体可以分为几个阶段第一阶段为从古代到1949年。这一时期可以看作是科学密码学的前夜时期,这阶段的密码技术可以说是一种艺术,而不是一种科学,密码学专家常常是凭知觉和信念来进行密码设计和分析,而不是推理和证明。
三、密码学直到今天仍具有艺术性,是具有艺术性的一门科学。这段时期密码学理论的研究工作进展不大,公开的密码学文献很少。20世纪70年代,在IBM沃森公司工作的菲斯特提出菲斯特密码体制,成为当今著名的数据加密标准DES的基础。
四、Rivest、Shamir和Adleman等三人公布了RSA密码体制,是一个真正实用的公钥密码体制,可以用于公钥加密和数字签名。
五、在密码分析领域,王小云教授对经典哈希算法MD5、SHA-1等的破解是近十年密码学的重大进展。随着计算能力的不断增强,现在的DES已经变得越来越不安全。美国国际标准研究所于2000年选择Rijndael作为高级加密算法AES取代DES。
六、密码的基本含义是:原始信息(称为明文)按指定规则(称为算法)转换(此过程称为加密)为使非授权者无法了解的特定符号,这些转换而来的符号(称为密文),必须具有已授权者可以恢复(此过程称为解密)出来的特性;所谓已经授权是指他合法地拥有了可以解密密文的关键信息(称为密钥)。
七、运用的数学手段是矩阵运算,其原理如下:首先将26个英文字母与模26的余数Z26建立一一对应,即A1,B2,…Y25,Z0,通过这种对应关系,把明文变换成数字串X,其次,取定一个正整数m及一个Z26上m阶可逆矩阵K(称为密钥),依次取X的m个数字组成Z26上的向量x=(x1,x2,…xm),利用密钥K加密为y=(y1,y2,…ym)=xK,把所有的y转变为字母,即得密文。
function [T, P_T, train_acc, test_acc, pruned_train_acc,pruned_test_acc, train_set] = id3(data_file,...train_size, test_size, prune_size, r_seed, depth)
%add testing/training/pruning accor.
tree = []
if (nargin <6)
depth = 7
end
if (nargin <5)
r_seed = 999
end
if (nargin <2)
train_size = 100
end
if (nargin <3)
test_size = 0
end
if (nargin <4)
prune_size = 0
end
global max_depth
max_depth = depth
%initialize random number generator
rand('seed',r_seed)
load(data_file)
l = length(data_file)
l = l-4
stripped_file = data_file(1:l)
data = eval(stripped_file)
[n_examples,features] = size(data)
%scramble data
rando = rand(1,n_examples)
[q,dex] = sort(rando)
for i = 1:n_examples
new_data(i,:) = data(dex(i),:)
end
data = new_data
n_training = ceil(n_examples * (train_size / 100))
train_set = data(1:n_training,:)
n_test = ceil(n_examples * (test_size / 100))
if (n_test >0)
test_set = data(n_training+1:n_training+n_test,:)
end
n_prune = ceil(n_examples * (train_size / 100))
if (n_prune >0)
prune_set = data(n_training+n_test+1:n_examples,:)
end
[T] = build_tree(train_set,0)
train_acc = trace_err(T,train_set)
train_acc = train_acc(:,2) / sum(train_acc(1,2:3))
if not(isempty(test_set))
test_acc = trace_err(T,test_set)
test_acc = test_acc(:,2) / sum(test_acc(1,2:3))
else
test_acc = []
end
if not(isempty(prune_set))
P_T = prune_tree(T,prune_set)
pruned_train_acc = trace_err(P_T,train_set)
pruned_train_acc = pruned_train_acc(:,2) / sum(pruned_train_acc(1,2:3))
pruned_test_acc = trace_err(P_T,test_set)
pruned_test_acc = pruned_test_acc(:,2) / sum(pruned_test_acc(1,2:3))
else
P_T = T
prune_acc = []
end
【第二题】密码破译str='TIPQRFXQG JIPQCPIQXTI ZIXKLGHVFNV XI'
str=str-'A'+1 % alphabet ->1,2,...26
str(str<0|str>26)=0% space->0
N=length(str)
M=27
strout=zeros(1,N)
if mod(N,2)==0
for ii=1:N/2
a=str(ii*2-1)
b=str(ii*2)
if a>=b
strout(ii*2-1)=a-b
else
strout(ii*2-1)=a-b+M
end
for jj=1:6
if (b+M*jj)/7 - floor((b+M*jj)/7) <eps
strout(ii*2) = (b+M*jj)/7
end
end
end
end
strout(strout>=1 &strout<= 26) = strout(strout>=1 &strout<= 26)-1 + 'A'
strout(strout==0)=' '
disp(char(strout))
% result:
% KIZNLXGNG AIZNNJSNDZI QIMQE MGS V OI
【第三题】猜数字
num = rand(1)*100%产生(0,100)随机数,服从均匀分布
num = ceil(num)%向上取最近的整数,落在[1,100]之间
i=0
flag=0
while i<7
a=input('请输入一个1-100的整数')
if a<num
disp('LOW')
elseif a>num
disp('HIGH')
else
disp('YOU WON')
flag=1
break
end
i=i+1
end
if flag==0
disp('YOU LOST')
end
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)