⑴ 求编程实现同步序列密码(流密码)的加解密系统,java或C都行。谢谢啦~
序列密码
编辑
流密码即序列密码。
序列密码也称为流密码(Stream Cipher),它是对称密码算法的一种。序列密码具有实现简单、便于硬件实施、加解密处理速度快、没有或只有有限的错误传播等特点,因此在实际应用中,特别是专用或机密机构中保持着优势,典型的应用领域包括无线通信、外交通信。 1949年Shannon证明了只有一次一密的密码体制是绝对安全的,这给序列密码技术的研究以强大的支持,序列密码方案的发展是模仿一次一密系统的尝试,或者说“一次一密”的密码方案是序列密码的雏形。如果序列密码所使用的是真正随机方式的、与消息流长度相同的密钥流,则此时的序列密码就是一次一密的密码体制。若能以一种方式产生一随机序列(密钥流),这一序列由密钥所确定,则利用这样的序列就可以进行加密,即将密钥、明文表示成连续的符号或二进制,对应地进行加密,加解密时一次处理明文中的一个或几个比特。
序列密码与分组密码的对比
分组密码以一定大小作为每次处理的基本单元,而序列密码则是以一个元素(一个字母或一个比特)作为基本的处理单元。
序列密码是一个随时间变化的加密变换,具有转换速度快、低错误传播的优点,硬件实现电路更简单;其缺点是:低扩散(意味着混乱不够)、插入及修改的不敏感性。
分组密码使用的是一个不随时间变化的固定变换,具有扩散性好、插入敏感等优点;其缺点是:加解密处理速度慢、存在错误传播。
序列密码涉及到大量的理论知识,提出了众多的设计原理,也得到了广泛的分析,但许多研究成果并没有完全公开,这也许是因为序列密码目前主要应用于军事和外交等机密部门的缘故。目前,公开的序列密码算法主要有RC4、SEAL等。
⑵ c语言编写的程序,在输入密码时,如何加密
加密和解密算法是程序编制中的重要一环。试想,如果我们平时使用的腾讯QQ、支付宝支付密码、今日头条账号密码那么轻易就被别人盗取的话,很多不可以预料的事情就会发生!
在现实生活中,我们遇到过太多QQ密码被盗取的情况,有的朋友QQ被盗之后,骗子利用朋友间信任骗取钱财的事情屡见不鲜。支付宝也曾出现过支付宝账户被恶意盗取的事件,对用户利益造成了严重损害!这些在技术上都指向了同一相关问题:软件加密算法的强壮程度。今天,小编利用C语言来简单实现一种加密方法。下面是源代码。
需要说明:程序利用了ascii码值的按照一定规律变换实现加密,对于解密过程,则是加密的逆过程。下面是程序的运行结果。
4190阅读
搜索
编程免费课程300节
初学编程100个代码
java自学一般要学多久
5秒破解excel密码
python必背100源代码
40岁零基础学编程
⑶ 用C语言实现让用户输入密码,判断正确否,若正确开始进入下一步新的程序的算法
#include
void
main()
{
int
n,password=123456,i=1;
while(1)
{
printf("输入密码:");
scanf("%d",&n);
if(n==password)
printf("welcome
to
use
the
software\n");
else
{
if(i<3)
printf("剩余的可输入密码的次数为:%d\n",3-i);
else
printf("password
error
!
you
can
not
use
the
software\n");
i++;
}
if(i>=4||n==password)break;
}
}
这个是不需要用return的,简明一点,初学的应该会
⑷ 通过Java如何实现AES密码算法
1. AES加密字符串
public static byte[] encrypt(String content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者
kgen.init(128, new SecureRandom(password.getBytes()));// 利用用户密码作为随机数初始化出
// 128位的key生产者
//加密没关系,SecureRandom是生成安全随机数序列,password.getBytes()是种子,只要种子相同,序列就一样,所以解密只要有password就行
SecretKey secretKey = kgen.generateKey();// 根据用户密码,生成一个密钥
byte[] enCodeFormat = secretKey.getEncoded();// 返回基本编码格式的密钥,如果此密钥不支持编码,则返回
// null。
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 转换为AES专用密钥
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, key);// 初始化为加密模式的密码器
byte[] result = cipher.doFinal(byteContent);// 加密
return result;
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
2. AES解密
public static byte[] decrypt(byte[] content, String password) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");// 创建AES的Key生产者
kgen.init(128, new SecureRandom(password.getBytes()));
SecretKey secretKey = kgen.generateKey();// 根据用户密码,生成一个密钥
byte[] enCodeFormat = secretKey.getEncoded();// 返回基本编码格式的密钥
SecretKeySpec key = new SecretKeySpec(enCodeFormat, "AES");// 转换为AES专用密钥
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, key);// 初始化为解密模式的密码器
byte[] result = cipher.doFinal(content);
return result; // 明文
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
} catch (BadPaddingException e) {
e.printStackTrace();
}
return null;
}
⑸ 科普:国产密码算法
密码学(cryptography): 通过将信息编码使其不可读,从而达到安全性。
算法 :取一个输入文本,产生一个输出文本。
加密算法 :发送方进行加密的算法。
解密算法 :接收方进行解密的算法。
对称密钥加密 (Symmetric Key Cryptography):加密与解密使用相同密钥。
非对称密钥加密 (Asymmetric Key Cryptography):加密与解密使用不同密钥。
密钥对 :在非对称加密技术中,有两种密钥,分为私钥和公钥,私钥是密钥对所有者持有,不可公布,公钥是密钥对持有者公布给他人的。
公钥 :公钥用来给数据加密,用公钥加密的数据只能使用私钥解密。
私钥 :如上,用来解密公钥加密的数据。
摘要 :对需要传输的文本,做一个HASH计算。
签名 :使用私钥对需要传输的文本的摘要进行加密,得到的密文即被称为该次传输过程的签名。
密码协议是指两个或两个以上的参与者为了达到某种特定目的而采取的一系列步骤。规定了一系列有序执行的步骤,必须依次执行。必须有两个或两个以上的参与者,有明确的目的。参与者都必须了解、同意并遵循这些步骤。
常见的密码协议包括IPSEC VPN 协议、SSL VPN 协议、密钥交换协议等。
密码是指描述密码处理过程的一组运算规则或规程,一般是指基于复杂数学问题设计的一组运算,其基本原理基于数学难题、可证明计算、计算复杂度等。主要包括:对称密码、公钥密码、杂凑算法、随机数生成。
在对称加密算法中,加密使用的密钥和解密使用的密钥是相同的,加密和解密都是使用同一个密钥,不区分公钥和私钥。
通信双方采用相同的密钥来加解密会话内容,即一段待加密内容,经过同一个密钥的两次对称加密后,与原来的结果一样,具有加解密速度快和安全强度高的优点。
国际算法:DES、AES。
国产算法:SM1、SM4、SM7。
非对称加解密算法又称为 公钥密码 ,其密钥是成对出现的。双方通信时,首先要将密钥对中的一个密钥传给对方,这个密钥可以在不安全的信道中传输;传输数据时,先使用自己持有的密钥做加密,对方用自己传输过去的密钥解密。
国际算法:RSA
国产算法:SM2
优点:
密钥分发数目与参与者数目相同,在有大量参与者的情况下易于密钥管理。
支持数字签名和不可否认性。
无需事先与对方建立关系,交换密钥。
缺点:
速度相对较慢。
可能比同等强度的对称密码算法慢10倍到100倍。
加密后,密文变长。
密码杂凑算法 :又称为散列算法或哈希函数,一种单向函数,要由散列函数输出的结果,回推输入的资料是什么,是非常困难的。
散列函数的输出结果,被称为讯息摘要(message digest)或是 摘要(digest) ,也被称为 数字指纹 。
杂凑函数用于验证消息的完整性, 在数字签名中,非对称算法对数据签名的速度较慢,一般会先将消息进行杂凑运算,生成较短的固定长度的摘要值。然后对摘要值进行签名,会大大提高计算效率 。
国际算法:MD5、SHA1、SHA2、SHA3
国产算法:SM3
2009年国家密码管理局发布的《信息安全等级保护商用密码技术实施要求》中明确规定,一、二、三、四级信息系统应使用商用密码技术来实施等级保护的基本要求和应用要求,一到四级的密码配用策略要求采用国家密码管理部门批准使用的算法。
2010年年底,国家密码管理局公开了SM2、SM3等国产密码算法。
2011年2月28日,国家密码管理局印发的【2011】145号文中明确指出,1024位RSA算法正在面临日益严重的安全威胁,并要求各相关企业在2012年6月30日前必须使用SM2密码算法
国家密码管理局在《关于做好公钥密码算法升级工作的函》中要求2011年7月1日以后建立并使用公钥密码的信息系统,应使用SM2算法;已经建设完成的系统,应尽快进行系统升级,使用SM2算法。
2014年底,国家密码管理局启动《重要信息系统密码应用推进总体研究课题》,确定十三五密码 科技 专项。
2017年11月底,国家密码管理局下发了《政务云密码支撑方案及应用方案设计要点》。
2017年国家密码管理局发布了42项金融和重要领域国产密码应用试点任务。
2018年,中共中央办公厅、国务院办公厅印发《金融和重要领域密码应用与创新发展工作规划(2018-2022年)。
2018年,为指导当时即将启动的商用密码应用安全性评估试点工作,国家密码管理局发布了密码行业标准GM/T0054-2018《信息系统密码应用 基本要求》。
2021年3月,国家市场监管总局、国家标准化管理委员会发布公告,正式发布国家标准GB/T39786-2021《信息安全技术信息系统密码应用基本要求》,该标准于2021年10月1日起实施。
SM1 算法是分组密码算法,分组长度为 128 位,密钥长度都为 128 比特,算法安全保密强度及相关软硬件实现性能与AES相当,算法不公开,仅以IP核的形式存在于芯片中。
算法集成于加密芯片、智能 IC 卡、智能密码钥匙、加密卡、加密机等安全产品,广泛应用于电子政务、电子商务及国民经济的各个应用领域(包括政务通、警务通等重要领域)。
SM2椭圆曲线公钥密码算法是我国自主设计的公钥密码算法,是一种基于ECC算法的 非对称密钥算法, 其加密强度为256位,其安全性与目前使用的RSA1024相比具有明显的优势。
包括SM2-1椭圆曲线数字签名算法,SM2-2椭圆曲线密钥交换协议,SM2-3椭圆曲线公钥加密算法,分别用于实现 数字签名密钥协商 和 数据加密 等功能。
SM3杂凑算法是我国自主设计的密码杂凑算法,属于哈希(摘要)算法的一种,杂凑值为256位,安全性要远高于MD5算法和SHA-1算法。
适用于商用密码应用中的 数字签名 和 验证消息认证码的生成与验证 以及 随机数 的生成,可满足多种密码应用的安全需求。
SM4 分组密码算法 是我国自主设计的分组对称密码算法,SM4算法与AES算法具有相同的密钥长度分组长度128比特,因此在安全性上高于3DES算法。
用于实现数据的加密/解密运算,以保证数据和信息的机密性。软件和硬件加密卡均可实现此算法。
商用密码技术框架包括 密码资源、密码支撑、密码服务、密码应用 等四个层次,以及提供管理服务的密码管理基础设施。
密码资源层: 主要是提供基础性的密码算法资源。
密码支撑层: 主要提供密码资源调用,由安全芯片、密码模块、智能IC卡、密码卡、服务器密码机、签名验签服务器、IPSCE/SSL VPN 等商密产品组成。
密码服务层: 提供密码应用接口,分为对称和公钥密码服务以及其他三大类。
密码应用层: 调用密码服务层提供的密码应用程序接口,实现数据的加解密、数字签名验签等服务。如应用 于 安全邮件、电子印章系统、安全公文传输、移动办公平台、可信时间戳等系统。
密码管理基础设施: 独立组件,为以上四层提供运维管理、信任管理、设备管理、密钥管理等功能。
完整的PKI系统必须具有权威认证机构(CA)、数字证书库、密钥备份及恢复系统(KMC)、证书作废系统(CRL)、应用接口(API)等基本构成部分,构建PKI也将围绕着这五大系统来着手构建。
CA 系统:Ca系统整个PKI的核心,负责证书的签发。CA首先产生自身的私钥和公钥(密钥长度至少为1024位),然后生成数字证书,并且将数字证书传输给安全服务器。、CA还负责为操作员、安全服务器以及注册机构服务器生成数字证书。安全服务器的数字证书和私钥也需要传输给安全服务器。
CA服务器是整个结构中最为重要的部分,存有CA的私钥以及发行证书的脚本文件,出于安全的考虑,应将CA服务器与其他服务器隔离,任何通信采用人工干预的方式,确保认证中心的安全。
(1)甲使用乙的公钥对明文进行加密,生成密文信息。
(2)甲使用HASH算法对明文进行HASH运算,生成数字指纹。
(3)甲使用自己的私钥对数字指纹进行加密,生成数字签名。
(4)甲将密文信息和数字签名一起发送给乙。
(5)乙使用甲的公钥对数字签名进行解密,得到数字指纹。
(6)乙接收到甲的加密信息后,使用自己的私钥对密文信息进行解密,得到最初的明文。
(7)乙使用HASH算法对还原出的明文用与甲所使用的相同HASH算法进行HASH运算,生成数字指纹。然后乙将生成的数字指纹与从甲得到的数字指纹进行比较,如果一致,乙接受明文;如果不一致,乙丢弃明文。
SSL 协议建立在可靠的传输协议(如 TCP)之上,为高层协议提供数据封装,压缩,加密等基本功能。
即可以协商加密算法实现加密传输,防止数据防窃听和修改,还可以实现对端设备身份验证、在这个过程中,使用国密算法进行加密、签名证书进行身份验证、加密证书用于密钥交换
SSL协商过程:
(1)客户端发出会话请求。
(2)服务端发送X.509证书(包含服务端的公钥)。
(3)客户端用已知Ca列表认证证书。
(4)客户端生成随机对称密钥,并利用服务端的公钥进行加密。
(5)双方协商完毕对称密钥,随后用其加密会话期间的用户最终数据。
利用SSL卸载技术及负载均衡机制,在保障通讯数据安全传输的同时,减少后台应用服务器的性能消耗,并实现服务器集群的冗余高可用,大幅度提升整个业务应用系统的安全性和稳定性。此外,借助多重性能优化技术更可缩短了业务访问的响应等待时间,明显提升用户的业务体验。
基于 数字证书 实现终端身份认证,给予密码运算实现本地数据的加密存储,数字证书硬件存储和密码运算由移动终端内置的密码部件提供。
移动应用管理系统服务器采用签名证书对移动应用软件安装包进行签名,移动应用管理系统客户端对签名信息进行验签,保障移动应用软件安装包的真实性和完整性。
移动办公应用系统采用签名证书对关键访问请求进行签名验证。
采用加密证书对关键传输数据和业务操作指令,以及移动终端本地存储的重要数据进行加密保护。
移动办公系统使用商用密码,基于数字证书认证系统,构建覆盖移动终端、网络、移动政务应用的安全保障体系,实现政务移动终端安全、接入安全、传输安全和移动应用安全 。
⑹ 如何用C语言编写密码程序
1、用一个字符数组来存密码
再用一个字符数组接收你的输入,然后用strcmp
来比较,如果返回0则密码是正确的
2、例程:
#include"stdio.h"
#include"string.h"
intmain()
{
charmima[100]="YuanShi888";
charinput[100]={0};
printf("请输入密码:");
gets(input);
if(strcmp(mima,input)==0)
printf("恭喜你,密码正确! ");
else
printf("对不起,密码输入错误! ");
}