⑴ 单向函数是什么.
4)单向散列函数介绍(Hash Function,哈希函数):
将任意长度的消息M映射/换算成固定长度值h(散列值,或消息摘要MD, Message Digest),最大的特点为其具有单向性。
h=H(M)
Hash函数用于消息认证(或身份认证)以及数字签名。
特性:
(1) 给定M,可算出h.
(2) 给定h,根据H(M)=h反推出M是非常困难的。
(3) 给定M,要找到另外一个消息M*,使其满足H(M*)=H(M)=h 是非常困难的。
注 (见 参考E,p75):
-从理论上说,有很多消息能生成相同的消息摘要。因为消息的长度是任意的,而摘要的长度是固定的。
-对于固定1000 bit的消息和固定128 bit的摘要,平均来说,有2872个消息与之对应,测试似乎不可能成功。
-对于一个128 bit的消息摘要算法,大约需要尝试2128个(长短不一的)消息,才能找到一个消息摘要与给定的摘要数值相吻合(作为攻击,当然该消息可为经篡改后的消息)。注:这里是用无数次的“尝试”,而非简单从h反推出M。
-对于一个128 bit的消息摘要算法,需要尝试264个消息才能找到两个具有相同摘要的消息。
-为什么将消息摘要定为128 bit? 因为消息摘要为m bit,任何人想要得到两个具有相同摘要的消息,大约需要尝试2m/2个消息。 若m=64, 则需检查232个消息,这在计算上是可行的。所以使m=128, 检查264个消息目前在计算上是不可行的。
应用举例讲解:
(i) 存储于银行计算机内的用户密码采用散列值,用于保密。
(ii)Alice要Bob写一份关于解雇Fred的报告,而Bob是Fred的朋友,想做“双面人”。
(iii)为文档和程序生成“指纹”或“DNA”。
在实际应用中,Hash函数是基于压缩函数的。
(RefC_p42_Hash函数)
给定任意长度的消息,Hash函数输出长度为m的散列值(即消息摘要)。
压倒函数的输入为
(1) 明文消息分组 Mi。
(2) 前一压缩数据的输出 CVi-1 (Compressed Vector)。
注:
-第一个压缩函数的输入M1为和IV (Initial Vector)。
-压缩函数的输出值为前所有分组的散列值;最后一个分组的散列值即为整个消息的散列值,即消息摘要MD。
Hash函数算法介绍: MD5算法 和 SHA-1算法。
MD5算法:
对任意长度的消息M作为输入,产生一个128 bit的散列值/消息摘要。
(RefC_p43_MD5算法)
算法包括5个步骤:
(1) 附加填充位:填充消息,使消息的长度位一个比512倍数小64位的数,填充位数为1~512。填充方法:原消息的后面第一位填1,其余填0。(例如:设消息为“abc”。)
(2) 附加长度:将原消息的64位表示附加在填充后的消息后面,这时处理后的消息的长度恰好为512的整数倍。(续上例)
若原消息的长度大于264时,则用原消息长度mod264的64位表示附加在填充后的消息后面。
(3) 初始化MD的缓冲区:缓冲区共有4个32 bit的寄存器 A、B、C、D, 各寄存器的初始值为
A: 01 23 45 67
B: 89 ab cd ef
C: fe dc ba 98
D: 76 54 32 10
(4) 按512 bit的消息分组处理输入消息:该步为MD5的主循环,包括4轮。
(RefC_p44_主循环处理)
每个循环均以当前正在处理的512 bit的分组Yq和128 bit的缓冲值ABCD为输入,然后更新缓冲内容。
以上4轮操作类似,每轮进行16次操作,各轮操作过程见下图。
(RefC_p44_某轮执行过程)
每一轮的非线性函数不同,4次所用的非线性函数分别记为 F、G、H、I。
F(X,Y,Z)=(X Y) ((~X) Z)
G(X,Y,Z)=(X Z) ( Y (~Z))
H(X,Y,Z)=X Y Z
I(X,Y,Z)=Y (X (~Z))
其中: :逻辑按位与 :逻辑按位或
~:逻辑按位反 :逻辑按位异或
注:T表:T[i]=232abs(sin(i))
安全散列函数算法(SHA, Secure Hash Algorithm):
SHA由美国NIST(国家标准与技术研究所)和NSA(国家标准协会)设计,用于数字签名(DS)。
SHA-1为SHA的修改版,于1995年发布。
SHA-1产生消息摘要的过程与MD5类似,但输入为度小于232 bit的消息,而输出为160 bit的散列值(即消息摘要MD),消息仍需填充使其最后为512的整数倍。
注:与MD5比较:
-附加填充位和附加消息长度与MD5相同。
-初始化缓冲器:SHA用两个缓冲区,每个区均有
5个32位的寄存器,分别为 A、B、C、D、E和H0、H1、H2、H3、H4。另有一单字缓冲区。
-按512 bit分组处理输入消息,主循环包括4轮(和MD5一样),但每轮操作20次(MD5为16次)
(详见参考资料)
2.5 数字信封
用于保证数据在传输过程中的安全。对称加密效率高,但密钥不适合在公共网络传递,而非对称加密传递简单,但效率低下。数字信封技术取二合一,即取对称加密的高效性和非对称加密的灵活性。
(RefB_p385_数字信封)
-两个不同的加密解密过程:明文的加密/解密,密钥的加密/解密。首先使用对称加密算法对数据加密;然后,利用非对称加密算法对对称加密过的密钥进行加密,过程包括:
(1) 发送消息时,发送方生成一个对称密钥。
(2) 发送方使用自己的对称加密的密钥和算法对欲发送的数据进行加密,形成数据密文。
(3) 发送方使用接收方提供的公钥,对自己的密钥进行加密。
(4) 发送方通过网络将加密后的密文和密钥传输到接收方。
(5) 接收方用私钥对加密后的发送方密钥进行解密,获得对称密钥。
(6) 接收方使用还原出的密钥对数据进行解密,得到数据明文。
应用两层加密体制,在内层运用对称加密技术,每次传送消息都可以重新生成新的密钥,保证消息的安全性。在外层,利用非对称加密技术加密对称密钥,保证密钥传递的安全性。
2.6 身份认证技术的发展
网络用户的身份认证可以用下列3中基本方法之一或它们的组合来实现。
(1) 所知(knowledge): 验证用户的密码,口令等。
(2) 所有(possession): 所掌握的用户的身份证、护照、信用卡等。
(3) 特征(characteristics):所掌握的用户的指纹、声音、笔记、手型,虹膜,DNA、动作等。
⑵ 常用的加密算法有哪些
对称密钥加密
对称密钥加密 Symmetric Key Algorithm 又称为对称加密、私钥加密、共享密钥加密:这类算法在加密和解密时使用相同的密钥,或是使用两个可以简单的相互推算的密钥,对称加密的速度一般都很快。
分组密码
分组密码 Block Cipher 又称为“分块加密”或“块加密”,将明文分成多个等长的模块,使用确定的算法和对称密钥对每组分别加密解密。这也就意味着分组密码的一个优点在于可以实现同步加密,因为各分组间可以相对独立。
与此相对应的是流密码:利用密钥由密钥流发生器产生密钥流,对明文串进行加密。与分组密码的不同之处在于加密输出的结果不仅与单独明文相关,而是与一组明文相关。
DES、3DES
数据加密标准 DES Data Encryption Standard 是由IBM在美国国家安全局NSA授权下研制的一种使用56位密钥的分组密码算法,并于1977年被美国国家标准局NBS公布成为美国商用加密标准。但是因为DES固定的密钥长度,渐渐不再符合在开放式网络中的安全要求,已经于1998年被移出商用加密标准,被更安全的AES标准替代。
DES使用的Feistel Network网络属于对称的密码结构,对信息的加密和解密的过程极为相似或趋同,使得相应的编码量和线路传输的要求也减半。
DES是块加密算法,将消息分成64位,即16个十六进制数为一组进行加密,加密后返回相同大小的密码块,这样,从数学上来说,64位0或1组合,就有2^64种可能排列。DES密钥的长度同样为64位,但在加密算法中,每逢第8位,相应位会被用于奇偶校验而被算法丢弃,所以DES的密钥强度实为56位。
3DES Triple DES,使用不同Key重复三次DES加密,加密强度更高,当然速度也就相应的降低。
AES
高级加密标准 AES Advanced Encryption Standard 为新一代数据加密标准,速度快,安全级别高。由美国国家标准技术研究所NIST选取Rijndael于2000年成为新一代的数据加密标准。
AES的区块长度固定为128位,密钥长度可以是128位、192位或256位。AES算法基于Substitution Permutation Network代换置列网络,将明文块和密钥块作为输入,并通过交错的若干轮代换"Substitution"和置换"Permutation"操作产生密文块。
AES加密过程是在一个4*4的字节矩阵(或称为体State)上运作,初始值为一个明文区块,其中一个元素大小就是明文区块中的一个Byte,加密时,基本上各轮加密循环均包含这四个步骤:
ECC
ECC即 Elliptic Curve Cryptography 椭圆曲线密码学,是基于椭圆曲线数学建立公开密钥加密的算法。ECC的主要优势是在提供相当的安全等级情况下,密钥长度更小。
ECC的原理是根据有限域上的椭圆曲线上的点群中的离散对数问题ECDLP,而ECDLP是比因式分解问题更难的问题,是指数级的难度。而ECDLP定义为:给定素数p和椭圆曲线E,对Q=kP,在已知P,Q 的情况下求出小于p的正整数k。可以证明由k和P计算Q比较容易,而由Q和P计算k则比较困难。
数字签名
数字签名 Digital Signature 又称公钥数字签名是一种用来确保数字消息或文档真实性的数学方案。一个有效的数字签名需要给接收者充足的理由来信任消息的可靠来源,而发送者也无法否认这个签名,并且这个消息在传输过程中确保没有发生变动。
数字签名的原理在于利用公钥加密技术,签名者将消息用私钥加密,然后公布公钥,验证者就使用这个公钥将加密信息解密并对比消息。一般而言,会使用消息的散列值来作为签名对象。
⑶ 在asp中如何解密SHA256加密函数
sha属于单向加密,类似于md5,不能逆运算,没有密钥,所以不能解密。
当然暴力破解可以碰碰运气,但成功率很低。
⑷ 知道私钥怎么提币
有了私钥,我们就可以使用椭圆曲线乘法这个单向加密函数产生一个公钥(K)。
有了公钥(K),我们就可以使用一个单向加密哈希函数生成比特币地址(A)。
H3
私钥
私钥就是一个随机选出的数字而已。一个比特币地址中的所有资金的控制取决于相应私钥的所有权和控制权。在比特币交易中,私钥用于生成支付比特币所必需的签名以证明资金的所有权。私钥必须始终保持机密,因为一旦被泄露给第三方,相当于该私钥保护之下的比特币也拱手相让了。私钥还必须进行备份,以防意外丢失,因为私钥一旦丢失就难以复原,其所保护的比特币也将永远丢失。
比特币私钥只是一个数字。你可以用硬币、铅笔和纸来随机生成你的私钥:掷硬币256次,用纸和笔记录正反面并转换为0和1,随机得到的256位二进制数字可作为比特币钱包的私钥。该私钥可进一步生成公钥。
H3
公钥
通过椭圆曲线算法可以从私钥计算得到公钥,这是不可逆转的过程:K = k * G。其中k是私钥,G是被称为生成点的常数点,而K是所得公钥。其反向运算,被称为“寻找离散对数”——已知公钥K来求出私钥k——是非常困难的,就像去试验所有可能的k值,即暴力搜索。
H3
比特币地址
比特币地址是一个由数字和字母组成的字符串,可以与任何想给你比特币的人分享。由公钥(一个同样由数字和字母组成的字符串)生成的比特币地址以数字“1”开头。下面是一个比特币地址的例子:
在交易中,比特币地址通常以收款方出现。如果把比特币交易比作一张支票,比特币地址就是收款人,也就是我们要写入收款人一栏的内容。一张支票的收款人可能是某个银行账户,也可能是某个公司、机构,甚至是现金支票。支票不需要指定一个特定的账户,而是用一个普通的名字作为收款人,这使它成为一种相当灵活的支付工具。与此类似,比特币地址的使用也使比特币交易变得很灵活。比特币地址可以代表一对公钥和私钥的所有者,也可以代表其它东西,比如“P2SH
(Pay-to-Script-Hash)”付款脚本。
⑸ 华为交换机的密码是经什么算法加密的
常见加密算法 MD5 SHA 等单向加密函数算法。。建议去下载一个加密算法检测工具,看雪学院有。
交换机的话,一般肯定用硬件实现方便的算法,如果有可能的话甚至都不加密。
一般交换机应该支持snmp协议管理,那种验证方法,较为复杂,具体情况你得用wireshark抓包。
总之破交换机密码,不复杂,穷举都OK了。。不过破解或者入侵前做好自我的防范工作,- - 给人抓到就Over了。
⑹ java加密的几种方式
朋友你好,很高兴为你作答。
首先,Java加密能够应对的风险包括以下几个:
1、核心技术窃取
2、核心业务破解
3、通信模块破解
4、API接口暴露
本人正在使用几维安全Java加密方式,很不错,向你推荐,希望能够帮助到你。
几维安全Java2C针对DEX文件进行加密保护,将DEX文件中标记的Java代码翻译为C代码,编译成加固后的SO文件。默认情况只加密activity中的onCreate函数,如果开发者想加密其它类和方法,只需对相关类或函数添加标记代码,在APK加密时会自动对标记的代码进行加密处理。
与传统的APP加固方案相比,不涉及到自定义修改DEX文件的加载方式,所以其兼容性非常好;其次Java函数被完全转化为C函数,直接在Native层执行,不存在Java层解密执行的步骤,其性能和执行效率更优。
如果操作上有不明白的地方,可以联系技术支持人员帮你完成Java加密。
希望以上解答能够帮助到你。
⑺ 求助:asp.net程序 对用户密码md5(md5($password).$salt)加密
$salt不是算法,只是一个变量而已,其实是用了PHP的crypt单向加密函数例如$A=
md5
('密码');
$B=crypt($A);
⑻ 电驴英文版有个Hashing,是什么
就是平常说的哈希校验...是用来判断文件是否被更改过...
电驴是下载完成后进行哈希校验的...而BT是在开始下载前进行哈希校验的..
关于哈希的更多介绍.我给你个网址吧.
⑼ 请问现在开发项目一般用到哪些加密算法
现阶段开发项目主要用到 BASE64 、 MD5 、 SHA 、 HMAC 几种加密算法。 BASE64 编码算法不算是真正的加密算法。 MD5 、 SHA 、 HMAC 这三种加密算法,可谓是非可逆加密,就是不可解密的加密方法,我们称之为单向加密算法。我们通常只把他们作为加密的基础。单纯的以上三种的加密并不可靠。 BASE64的加密解密是双向的,可以求反解。 MD5、SHA以及HMAC是单向加密,任何数据加密后只会产生唯一的一个加密串,通常用来校验数据在传输过程中是否被修改。其中HMAC算法有一个密钥,增强了数据传输过程中的安全性,强化了算法外的不可控因素。 单向加密的用途主要是为了校验数据在传输过程中是否被修改。
⑽ md5码,帮我解密,有可能被加密过几次,给您5分
MD5使用的是单向加密函数,一般不能解密.据说有人已经建立了庞大的数据库用于解密.但我觉得这好不现实.