当前位置:首页 » 操作系统 » 密码算法设计

密码算法设计

发布时间: 2023-01-29 15:02:42

❶ 毕业设计翻译 关于密码算法

我最近也在研究这个东西
目前分组密码所采用的整体结构可分为Feistel结构(如CAST-256、DEAL、DFC/E2等)、SP网络(如Safer+、Serpent等)及其他密码结构(如Frog和HPC)。Feistel结构将明文分组分为左右对称两部分,根据 经验公式,经过多轮循环得到运算结果;另一类算法是基于SP网络结构设计,如图1(b)所示。SP网络结构采用替代和置换的方法简单有效地遵循了香农定理,替代操作通过S盒达到了混淆效果,置换操作通过P盒扩散效果;还有一类是基于不同代数群的混合运算设计的算法,使用频率比较低。Feistel结构最大的优点是容易保证加解密相似,这一点在实现中尤为重要,而SP网络比较难做到这一点,但是SP网络的扩散特性比较好。
我论文的部分内容,借你参考

❷ 科普:国产密码算法


密码学(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卸载技术及负载均衡机制,在保障通讯数据安全传输的同时,减少后台应用服务器的性能消耗,并实现服务器集群的冗余高可用,大幅度提升整个业务应用系统的安全性和稳定性。此外,借助多重性能优化技术更可缩短了业务访问的响应等待时间,明显提升用户的业务体验。


基于 数字证书 实现终端身份认证,给予密码运算实现本地数据的加密存储,数字证书硬件存储和密码运算由移动终端内置的密码部件提供。

移动应用管理系统服务器采用签名证书对移动应用软件安装包进行签名,移动应用管理系统客户端对签名信息进行验签,保障移动应用软件安装包的真实性和完整性。

移动办公应用系统采用签名证书对关键访问请求进行签名验证。

采用加密证书对关键传输数据和业务操作指令,以及移动终端本地存储的重要数据进行加密保护。

移动办公系统使用商用密码,基于数字证书认证系统,构建覆盖移动终端、网络、移动政务应用的安全保障体系,实现政务移动终端安全、接入安全、传输安全和移动应用安全 。

❸ AES是什么

AES是高级加密标准。
高级加密标准(英语:Advanced Encryption Standard,缩写:AES),在密码学中又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院(NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

设计者
该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。Rijdael的发音近于 "Rhinedoll,两位设计者的名字,参考荷兰语原发音可译为尤安·达蒙、文森特·莱蒙。(Joan不能译为女性化的名字“琼”。另外,西欧的姓名很多是有相同拉丁文或希腊文源头的,故译成中文是可能相同)

加密标准
对称密码体制的发展趋势将以分组密码为重点。分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。加密算法由一个密码学上的弱函数f与r个子密钥迭代r次组成。混乱和密钥扩散是分组密码算法设计的基本原则。抵御已知明文的差分和线性攻击,可变长密钥和分组是该体制的设计要点。
AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。
AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。1999年3月完成了第二轮AES2的分析、测试。2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Rijmen 提出的一种密码算法RIJNDAEL 作为 AES.
在应用方面,尽管DES在安全上是脆弱的,但由于快速DES芯片的大量生产,使得DES仍能暂时继续使用,为提高安全强度,通常使用独立密钥的三级DES。但是DES迟早要被AES代替。流密码体制较之分组密码在理论上成熟且安全,但未被列入下一代加密标准。
AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐)。AES加密有很多轮的重复和变换。大致步骤如下:1、密钥扩展(KeyExpansion),2、初始轮(Initial Round),3、重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey,4、最终轮(Final Round),最终轮没有MixColumns。

❹ Rijndael加密法

密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。经过五年的甄选流程,高级加密标准由美国国家标准与技术研究院 (NIST)于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。2006年,高级加密标准已然成为对称密钥加密中最流行的算法之一。

该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以Rijndael之命名之,投稿高级加密标准的甄选流程。(Rijdael的发音近于 “Rhinedoll”)

AES 是一个新的可以用于保护电子数据的加密算法。明确地说,AES 是一个迭代的、对称密钥分组的密码,它可以使用128、192 和 256 位密钥,并且用 128 位(16字节)分组加密和解密数据。与公共密钥密码使用密钥对不同,对称密钥密码使用相同的密钥加密和解密数据。通过分组密码返回的加密数据的位数与输入数据相同。迭代加密使用一个循环结构,在该循环中重复置换(permutations )和替换(substitutions)输入数据。Figure 1 显示了 AES 用192位密钥对一个16位字节数据块进行加密和解密的情形。

对称密码体制的发展趋势将以分组密码为重点。分组密码算法通常由密钥扩展算法和加密(解密)算法两部分组成。密钥扩展算法将b字节用户主密钥扩展成r个子密钥。加密算法由一个密码学上的弱函数f与r个子密钥迭代r次组成。混乱和密钥扩散是分组密码算法设计的基本原则。抵御已知明文的差分和线性攻击,可变长密钥和分组是该体制的设计要点。

AES是美国国家标准技术研究所NIST旨在取代DES的21世纪的加密标准。

AES的基本要求是,采用对称分组密码体制,密钥长度的最少支持为128、192、256,分组长度128位,算法应易于各种硬件和软件实现。1998年NIST开始AES第一轮分析、测试和征集,共产生了15个候选算法。1999年3月完成了第二轮AES2的分析、测试。2000年10月2日美国政府正式宣布选中比利时密码学家Joan Daemen 和 Vincent Rijmen 提出的一种密码算法RIJNDAEL 作为 AES.

AES加密数据块大小最大是256bit,但是密钥大小在理论上没有上限。AES加密有很多轮的重复和变换。大致步骤如下:

1. 密钥扩展(KeyExpansion)

2. 初始轮(Initial Round)

3. 重复轮(Rounds),每一轮又包括:SubBytes、ShiftRows、MixColumns、AddRoundKey

4. 最终轮(Final Round),最终轮没有MixColumns。

import javax.crypto.BadPaddingException;

import javax.crypto.Cipher;

import javax.crypto.IllegalBlockSizeException;

import javax.crypto.KeyGenerator;

import javax.crypto.NoSuchPaddingException;

import javax.crypto.SecretKey;

import javax.crypto.spec.SecretKeySpec;

import java.io.UnsupportedEncodingException;

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

import java.security.SecureRandom;

public abstract class AesHelper {

    /**

    * 加密

    *

    * @param content 需要加密的内容

    * @param salt    加密密码

    * @return

    */

    public static byte[] encrypt(String content, String salt) {

        try {

            SecureRandom random = SecureRandom.getInstance("SHA1PRNG");

            random.setSeed(salt.getBytes());

            KeyGenerator kgen = KeyGenerator.getInstance("AES");

            kgen.init(128, random);

            SecretKey secretKey = kgen.generateKey();

            byte[] enCodeFormat = secretKey.getEncoded();

            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "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 (NoSuchAlgorithmException e) {

            e.printStackTrace();

        } catch (NoSuchPaddingException e) {

            e.printStackTrace();

        } catch (InvalidKeyException e) {

            e.printStackTrace();

        } catch (UnsupportedEncodingException e) {

            e.printStackTrace();

        } catch (IllegalBlockSizeException e) {

            e.printStackTrace();

        } catch (BadPaddingException e) {

            e.printStackTrace();

        }

        return null;

    }

    /**

    * 解密

    *

    * @param content 待解密内容

    * @param salt    解密密钥

    * @return

    */

    public static byte[] decrypt(byte[] content, String salt) {

        try {

            KeyGenerator kgen = KeyGenerator.getInstance("AES");

            SecureRandom secureRandom = SecureRandom.getInstance("SHA1PRNG");

            secureRandom.setSeed(salt.getBytes());

            kgen.init(128, secureRandom);

            SecretKey secretKey = kgen.generateKey();

            byte[] enCodeFormat = secretKey.getEncoded();

            SecretKeySpec key = new SecretKeySpec(enCodeFormat, "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;

    }

    public static String bytesToHexString(byte[] src) {

        StringBuffer sb = new StringBuffer();

        for (int i = 0; i < src.length; i++) {

            String hex = Integer.toHexString(src[i] & 0xFF);

            if (hex.length() == 1) {

                hex = '0' + hex;

            }

            sb.append(hex.toUpperCase());

        }

        return sb.toString();

    }

    public static String encryptToStr(String content, String password){

        return bytesToHexString(encrypt(content,password));

    }

    public static byte[] decrypt(String content, String keyWord) {

        return decrypt(hexStringToBytes(content), keyWord);

    }

    public static byte[] hexStringToBytes(String hexString) {

        if (hexString.length() < 1)

            return null;

        byte[] result = new byte[hexString.length() / 2];

        for (int i = 0; i < hexString.length() / 2; i++) {

            int high = Integer.parseInt(hexString.substring(i * 2, i * 2 + 1), 16);

            int low = Integer.parseInt(hexString.substring(i * 2 + 1, i * 2 + 2), 16);

            result[i] = (byte) (high * 16 + low);

        }

        return result;

    }

}

public class TestMain {

    public void main(){

        String content = "carl.zhao";

        String Key = "http://www.csdn.net";

        //加密

        String encryptResult = AesHelper.encryptToStr(content, Key);

        //解密

        byte[] decryptResult = AesHelper.decrypt(encryptResult,Key);

        Assert.assertEquals(content, new String(decryptResult));

    }

}

输出结果:

@@3c2278ea668b03b50102@@

❺ 快速了解常用的对称加密算法,再也不用担心面试官的刨根问底

加密算法通常被分为两种: 对称加密 非对称加密 。其中,对称加密算法在加密和解密时使用的密钥相同;非对称加密算法在加密和解密时使用的密钥不同,分为公钥和私钥。此外,还有一类叫做 消息摘要算法 ,是对数据进行摘要并且不可逆的算法。

这次我们了解一下对称加密算法。

对称加密算法在加密和解密时使用的密钥相同,或是使用两个可以简单地相互推算的密钥。在大多数的对称加密算法中,加密和解密的密钥是相同的。

它要求双方在安全通信之前,商定一个密钥。对称算法的安全性依赖于密钥,泄漏密钥就意味着任何人都可以对他们发送的信息进行解密,这也是对称加密算法的主要缺点之一。

常见的对称加密算法有:DES算法、3DES算法、AES算法。

DES算法(Data Encryption Standard)是一种常见的分组加密算法。

分组加密算法是将明文分成固定长度的组,每一组都采用同一密钥和算法进行加密,输出也是固定长度的密文。

由IBM公司在1972年研制,1976年被美国联邦政府的国家标准局确定为联邦资料处理标准(FIPS),随后在国际上广泛流传开来。

在DES算法中,密钥固定长度为64位。明文按64位进行分组,分组后的明文组和密钥按位置换或交换的方法形成密文组,然后再把密文组拼装成密文。

密钥的每个第八位设置为奇偶校验位,也就是第8、16、24、32、40、48、56、64位,所以密钥的实际参与加密的长度为56位。

我们用Java写个例子:

运行结果如下:

DES现在已经不是一种安全的加密方法,主要因为它使用的密钥过短,很容易被暴力破解。

3DES算法(Triple Data Encryption Algorithm)是DES算法的升级版本,相当于是对明文进行了三次DES加密。

由于计算机运算能力的增强,DES算法由于密钥长度过低容易被暴力破解;3DES算法提供了一种相对简单的方法,即通过增加DES的密钥长度来避免类似的攻击,而不是设计一种全新的块密码算法。

在DES算法中,密钥固定长度为192位。在加密和解密时,密钥会被分为3个64位的密钥。

加密过程如下:

解密过程如下:

我们用Java写个例子:

运行结果如下:

虽然3DES算法在安全性上有所提升,但是因为使用了3次DES算法,加密和解密速度比较慢。

AES(Advanced Encryption Standard,高级加密标准)主要是为了取代DES加密算法的,虽然出现了3DES的加密方法,但由于它的加密时间是DES算法的3倍多,密钥位数还是不能满足对安全性的要求。

1997年1月2号,美国国家标准与技术研究院(NIST)宣布什望征集高级加密标准,用以取代DES。全世界很多密码工作者都提交了自己设计的算法。经过甄选流程,高级加密标准由美国国家标准与技术研究院于2001年11月26日发布于FIPS PUB 197,并在2002年5月26日成为有效的标准。

该算法为比利时密码学家Joan Daemen和Vincent Rijmen所设计,结合两位作者的名字,以 Rijndael 为名投稿高级加密标准的甄选流程。

AES算法的密钥长度是固定,密钥的长度可以使用128位、192位或256位。

AES算法也是一种分组加密算法,其分组长度只能是128位。分组后的明文组和密钥使用几种不同的方法来执行排列和置换运算形成密文组,然后再把密文组拼装成密文。

我们用Java写个例子:

运行结果如下:

AES算法是目前应用最广泛的对称加密算法。

对称加密算法在加密和解密时使用的密钥相同,常见的对称加密算法有:DES算法、3DES算法、AES算法。
由于安全性低、加密解密效率低,DES算法和3DES算法是不推荐使用的,AES算法是目前应用最广泛的对称加密算法。

❻ 用c语言设计一个简单地加密算,解密算法,并说明其中的原理

恰巧这两天刚看的一种思路,很简单的加密解密算法,我说一下吧。
算法原理很简单,假设你的原密码是A,用A与数B按位异或后得到C,C就是加密后的密码,用C再与数B按位异或后能得回A。即(A异或B)异或B=A。用C实现很简单的。
这就相当于,你用原密码A和特定数字B产生加密密码C,别人拿到这个加密的密码C,如果不知道特定的数字B,他是无法解密得到原密码A的。
对于密码是数字的情况可以用下面的代码:
#include <stdio.h>
#define BIRTHDAY 19880314
int main()
{
long a, b;

scanf("%ld", &a);
printf("原密码:%ld\n", a);
b = BIRTHDAY;
a ^= b;
printf("加密密码:%ld\n", a);

a ^= b; printf("解密密码:%ld\n", a);
return 0;
}
如果密码是字符串的话,最简单的加密算法就是对每个字符重新映射,只要加密解密双方共同遵守同一个映射规则就行啦。

❼ 现代密码学为什么要求公开密码学算法

这个主要是为了保证设计的密码算法是可靠的,不是随随便便就能被人破解的.因为设计好的密码算法总是要被人用的,而要被人广泛使用的话,绝对无法保证算法本身的保密性(小范围使用还可以差不多保证). 理论上来说,这是因为现代密码学的密码算法设计是

❽ 国密算法是什么呢

国密算法是国家密码局制定标准的一系列算法。其中包括了对称加密算法,椭圆曲线非对称加密算法,杂凑算法。具体包括SM1、SM2、SM3、SMS4等,其中:

SM1:对称加密算法,加密强度为128位,采用硬件实现。

SM2:国家密码管理局公布的公钥算法,其加密强度为256位。其它几个重要的商用密码算法包括:

SM3:密码杂凑算法,杂凑值长度为32字节,和SM2算法同期公布,参见《国家密码管理局公告(第 22 号)》。

SMS4:对称加密算法,随WAPI标准一起公布,可使用软件实现,加密强度为128位。

案例

例如:在门禁应用中,采用SM1算法进行身份鉴别和数据加密通讯,实现卡片合法性的验证,保证身份识别的真实性。安全是关系国家、城市信息、行业用户、百姓利益的关键问题。国家密码管理局针对现有重要门禁系统建设和升级改造应用也提出指导意见,加强芯片、卡片、系统的标准化建设。

❾ 为什么在设计密码算法时,应当遵循一切秘密蕴含于密钥之中

如果信息大于密钥会被解开,要是信息比密钥短,可以说是解放不开的。

❿ 黄依依结局死了吗

曾经有一部电视剧引起剧烈的反响,那就是谍战剧《暗算》,这部剧中有很多出彩的人物,而其中让人印象最深刻的就要数陈数饰演的黄依依,看过这部剧的人都会被陈数的演技所折服,而作为剧中的主角,黄依依的结局也是十分令人痛惜的,那么黄依依最后怎么样了?

暗算里黄依依是怎么死的?

热播剧《暗算》中,女一号陈数显得非常惹眼,这个荧屏上前所未有的个性角色,不仅成为很多男性观众眼中的梦中情人,更得到了“死后”被观众悼念的超高待遇。



10年破解世界5大着名密码,很多人会想,这个科学家一定是一个生活非常单调的人。王小云却说:“那10年是我感觉过得很轻松的10年。”在破解密码的同时,她生了一个女儿,还养了一阳台的花。在生活中她唯一与数字有关的习惯竟然是记出租车号。

原来,王小云的课题组中有一半多成员都是女博士生。工作晚了,没有公交车,王小云总要送她们打车回家。为了保证安全,她总要记住学生们乘坐出租车的车号,等学生到家给她发回平安短信,她才把记住的出租车号从脑子里删除。
热点内容
如何查看java版本 发布:2024-05-05 16:45:05 浏览:494
转子绕组电动机控制柜如何配置 发布:2024-05-05 16:45:04 浏览:916
搭建游戏要多大服务器 发布:2024-05-05 16:44:16 浏览:345
云服务器ecs网站 发布:2024-05-05 16:35:55 浏览:562
c语言打印正方形 发布:2024-05-05 16:09:20 浏览:643
编程用箭头 发布:2024-05-05 15:54:21 浏览:794
步骤条源码 发布:2024-05-05 15:35:55 浏览:846
安卓拍光遇视频如何高清 发布:2024-05-05 15:23:20 浏览:934
linuxo文件 发布:2024-05-05 15:19:12 浏览:945
手机服务器地址或者域名 发布:2024-05-05 15:19:09 浏览:374