一个matlab程序加密后只能通过密码或者生成密钥来运行程序如何实现?

一个matlab程序加密后只能通过密码或者生成密钥来运行程序如何实现?,第1张

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


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12021374.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-20
下一篇 2023-05-20

发表评论

登录后才能评论

评论列表(0条)

保存