cbc

AES CBC模式下的Padding Oracle解密

别来无恙 提交于 2020-01-18 04:24:33
AES CBC模式下的Padding Oracle解密 /*--> */ /*--> */ */ /*--> */ */ /*--> */ */ /*--> */ */ /*--> */ AES CBC模式下的Padding Oracle解密 目录 1. 简介 2. aes cbc加解密测试程序 3. Padding Oracle Attack过程 4. 总结 1 简介 Padding Oracle攻击方法出现的也比较早了,参考 padding oracle attack ,这篇文章写的比较好。 也可以参考 ctf-wiki 。 Padding Oracle Attack主要是针对CBC分组加密的情况,通过padding来测试每个分组的每个字节是否正确来获取分组的中间状态值,上一个分组XOR中间状态值就是明文。第一个分组使用初始IV来XOR获得明文。 图1 CBC模式一个分组的解密过程 2 aes cbc加解密测试程序 用FLASK实现一个aes cbc加解密的测试程序,代码如下,保存为aes_server.py: #!/usr/bin/python # coding=utf-8 # python 3 # 安装依赖 pip3 install PyCrypto flask # 运行 FLASK_APP=aes_server.py flask run from http.server

http和https ,https申请ssl证书

我与影子孤独终老i 提交于 2020-01-13 11:57:53
<Connector port="443" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="200" SSLEnabled="true" scheme="https" secure="true" clientAuth="false" sslProtocol="TLSv1.2" keystoreFile="D:/tomcat/apache-tomcat-7.0.78-SSL/conf/jks/ssl.jks" keystorePass="这个是申请时候填写的密码" URIEncoding="UTF-8" sslEnabledProtocols="TLSv1,TLSv1.1,TLSv1.2" ciphers="TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA,TLS_ECDHE_ECDSA_WITH_AES_256_CBC_SHA384,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES

PHP 开发API接口签名验证

老子叫甜甜 提交于 2020-01-13 02:37:10
密码学中的高级加密标准(Advanced Encryption Standard,AES),又称Rijndael加密法,是美国联邦政府采用的一种区块加密标准。这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。 解释来源: http://baike.so.com/doc/6783134-6999702.html 参考: http://www.docin.com/p-572103142.html 上一篇 : PHP 开发API接口签名验证 中我们说到了sign签名,sign其实是防篡改的一种方法,它将约定好的排序、位置、数组进行密钥加密生成sign对比。 是的,sign签名我们是能看到数据的,只是可以防止数据的篡改。而AES可以加密解密数据 AES通过约定好的密钥进行加密,通过约定好的密钥解密。 ECB加密模式(不推荐): 容易被攻击 <?php /* * 加密 */ function encrypt($input, $key) { $size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB); $input = pkcs5_pad($input, $size); $td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '

python通过xlrd读取Excel表格和Template批量生成配置

旧时模样 提交于 2019-12-29 21:34:32
当需要配置的网络设备很多的时候,不可能都通过手动去配置。此时则需要利用脚本来批量生成配置。从而既保证了配置的准确性,也提高了配置的效率。 可以利用python的xrld库来读取execl表格,利用String库的Template模板来配合批量生成配置。 Template模板替换: 主要利用Template的substitute(config)方法进行替换。 substitute ( mapping [, kws]) 执行模板替换,返回一个新字符串。映射是任何类似于字典的对象,其键与模板中的占位符匹配。或者,可以提供关键字参数,其中关键字是占位符。当映射和kws都给定且存在重复时,kws中的占位符优先。 safe_substitute ( mapping [, kws]) 与substitute()类似,但如果映射和kws中缺少占位符,则不会引发KeyError异常,而原始占位符将完整地出现在结果字符串中。而且,与substitute()不同的是,$的任何其他外观都将简单地返回$,而不是引发ValueError。 当其他异常仍然可能发生时,这个方法被称为“安全”,因为它总是试图返回一个可用的字符串,而不是引发异常。在另一种意义上,safe_substitute()可能不是安全的,因为它将无声地忽略包含悬空的畸形模板 substitute()和safe_substitute(

AES后端加密解密数据CBC模式

℡╲_俬逩灬. 提交于 2019-12-26 19:32:31
AES后端加密解密数据CBC模式 今天项目有用到加密登陆密码,实际业务是前端加密,后端解密,主要使用的是AES进行解密 主要maven依赖 < dependency > < groupId > commons - codec < / groupId > < artifactId > commons - codec < / artifactId > < version > 1.10 < / version > < / dependency > < dependency > < groupId > org . apache . commons < / groupId > < artifactId > commons - lang3 < / artifactId > < version > 3.4 < / version > < / dependency > 上代码 public class AESUtil { //密钥 (需要前端和后端保持一致)要求16位 private static final String KEY = "12345678910abcde" ; //偏移量(CBC模式需要,需要前端和后端保持一致)要求16位 private static final String IV = "12345678910abcde" ; //具体算法/加密模式/补码方式 private

AES CBC加解密

荒凉一梦 提交于 2019-12-19 03:47:45
项目中用到AES-128-CBC加密模式,服务端客户端采用不同语言开发,记录不同语言AES的实现。 AES加密数据块分组长度必须为128比特,密钥长度可以是128比特、192比特、256比特中的任意一个(如果数据块及密钥长度不足时,会补齐,补齐的是size)。 1. NodeJS var crypto = require('crypto') // AES 加密 function encryptstring(str) { var cipher = crypto.createCipheriv('aes-128-cbc', '1234567812345678', '1234567812345678'), encrypted = cipher.update(str, 'utf-8', 'base64'); encrypted += cipher.final('base64'); return encrypted; } console.log(encryptstring("hello world")) $ node aes.js a2SpM37nvVYtBnVHonX86w== 2. Golang package main import ( "bytes" "crypto/aes" "crypto/cipher" "encoding/base64" "fmt" ) const ( KEY =

php7 openssl_decrypt AES的ECB与CBC加解密

蹲街弑〆低调 提交于 2019-12-04 05:49:54
php7.2版本用openssl_encrypt代替mcrypt_encrypt,导致以往自己写的Aes加密类不能用。 这次项目客户端用的是 AES-128-ECB 加密,我用在线AES工具来测试,发现自己写的加解密方法得到的值不一样。而最终发现是加密的key不是16位长,导致ios客户端与服务器php的加解密不一致。后商讨key为16位长,遂问题解决。下面是 AES-128-ECB 加密类; class Aes { //密钥 须是16位 public $key ; /** * 解密字符串 * @param string $data 字符串 * @return string */ public function __construct() { $this->key = '1234567890123456'; } public function decode($str) { return openssl_decrypt(base64_decode($str),"AES-128-ECB",$this->key,OPENSSL_RAW_DATA); } /** * 加密字符串 * @param string $data 字符串 * @return string */ public function encode($str) { return base64_encode(openssl

分组密码CBC加密缺陷

心已入冬 提交于 2019-12-03 13:52:53
title: 分组密码CBC加密缺陷 date: 2017-05-15 10:04:47 tags: ["密码学"] --- 关于密码学的种种漏洞以及利用网上也有不少,但是比较零散,有关介绍比较局限,导致一些东西晦涩难懂不易理解,这里是一个有关于CBC分组加密的一个讲解 CBC加密模式 首先上图 这里文字描述不如看图直观,还是大致描述一下,CBC模式的加密方式是通过一个初始向量(IV)先和明文分组第一组异或后使用秘钥K加密,作为第一组密文,同时又与后一分组的明文异或后进行加密产生下一组密文,依次重复。 其解密和加密是对称的,密文先解密,再异或。 关于这个初始向量IV的完整性要比其保密性更为重要。在CBC模式下,最好是每发一个消息,都改变IV,比如将其值加一。 这里说说有关于CBC的错误传播,有利于之后字节翻转攻击的理解 其特点如下: 明文有一组中有错,会使以后的密文组都受影响,但经解密后的恢复结果,除原有误的一组外,其后各组明文都正确地恢复。 解密时,有一组秘钥错误,该错误会影响下一分组相同位置的解密 若在传送过程中,某组密文组出错时,则该组恢复的明文和下一组恢复数据出错。再后面的组将不会受中错误比特的影响。 字节翻转攻击 概述 有关于这里的攻击,没有下面那种方式刺激,但是效果也还是可以 这里最大的效果就是: 在不知道Key(秘钥)的情况下篡改明文 。 通过上面的错误传播

Encrypt/Decrypt using mcrypt

匿名 (未验证) 提交于 2019-12-03 09:02:45
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: Trying to achieve encrypting and decryption using following strategy, but ending up with random characters mostly. class Crypt { public static function encrypt($string, $account) { // create a random initialization vector to use with CBC encoding $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC); $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND); $key = pack('H*', $account . $account); $output = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key, $string, MCRYPT_MODE_CBC, $iv); $output = $iv . $output; $output = base64_encode($output);

SSLv2Hello - javax.net.ssl.SSLException: Received fatal alert: unexpected_message

匿名 (未验证) 提交于 2019-12-03 08:52:47
可以将文章内容翻译成中文,广告屏蔽插件可能会导致该功能失效(如失效,请关闭广告屏蔽插件后再试): 问题: I am trying to call an SSL protected web service running on JDK7 / WildFly 8.2 with a Java 6 (update 31) based client. The first problem I encountered on the client was: javax.net.ssl.SSLException: Received fatal alert: unexpected_message By setting javax.net.debug to all on both sides, I got the following hint on the server side: javax.net.ssl.SSLHandshakeException: SSLv2Hello is disabled Quick research shows that, SSLv2Hello disabled by default on the client: In Java SE 7, SSLv2Hello is removed from the default enabled protocol list on the