AES加密 ECB模式 PKCS5填充 128位密码/密码块

ECB模式是将明文按照固定大小的块进行加密的,块大小不足则进行填充,ECB模式没有用到向量。

具体加密算法,请参见米扑博客总结的系列文章:AES、DES、RSA三种典型加密算法

PHP 实现

class AES {

var $key = "1234567812345678";

public function __set($key, $value){

$this->$key = $value;

}

public function __get($key) {

return $this->$key;

}

public function encrypt($input) {

$size = mcrypt_get_block_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_ECB);

$input = $this->pkcs5_pad($input, $size);

$td = mcrypt_module_open(MCRYPT_RIJNDAEL_128, '', MCRYPT_MODE_ECB, '');

$iv = mcrypt_create_iv (mcrypt_enc_get_iv_size($td), MCRYPT_RAND);

mcrypt_generic_init($td, $this->key, $iv);

$data = mcrypt_generic($td, $input);

mcrypt_generic_deinit($td);

mcrypt_module_close($td);

$data = $this->base64url_encode($data);

return $data;

}

private function pkcs5_pad ($text, $blocksize) {

$pad = $blocksize - (strlen($text) % $blocksize);

return $text . str_repeat(chr($pad), $pad);

}

function strToHex($string)

{

$hex="";

for ($i=0;$i

$hex.=dechex(ord($string[$i]));

$hex=strtoupper($hex);

return $hex;

}

function hexToStr($hex)

{

$string="";

for ($i=0;$i

$string.=chr(hexdec($hex[$i].$hex[$i+1]));

return $string;

}

public function decrypt($sStr) {

$decrypted= mcrypt_decrypt(

MCRYPT_RIJNDAEL_128,

//$sKey,

$this->key,

//base64_decode($sStr),

$this->base64url_decode($sStr),

//$sStr,

MCRYPT_MODE_ECB

);

$dec_s = strlen($decrypted);

$padding = ord($decrypted[$dec_s-1]);

$decrypted = substr($decrypted, 0, -$padding);

return $decrypted;

}

/**

*url 安全的base64编码 sunlonglong

*/

function base64url_encode($data) {

return rtrim(strtr(base64_encode($data), '+/', '-_'), '=');

}

/**

*url 安全的base64解码 sunlonglong

*/

function base64url_decode($data) {

return base64_decode(str_pad(strtr($data, '-_', '+/'), strlen($data) % 4, '=', STR_PAD_RIGHT));

}

}

PHP 使用示例:

$aes = new AES();

// 设置密钥

$aes->__set("key", "1234567812345678");

echo $aes->encrypt("123");

echo "\r\n";

echo $aes->decrypt("q7eZEivlY5ra7BUPzoF9vg");

Python 实现

官网介绍:This is a collection of both secure hash functions (such as SHA256 and RIPEMD160), and various encryption algorithms (AES, DES, RSA, ElGamal, etc.)

官网示例

An example usage of the SHA256 module is:

>>> from Crypto.Hash import SHA256

>>> hash = SHA256.new()

>>> hash.update('message')

>>> hash.digest()

'\xabS\n\x13\xe4Y\x14\x98+y\xf9\xb7\xe3\xfb\xa9\x94\xcf\xd1\xf3\xfb"\xf7\x1c\xea\x1a\xfb\xf0+F\x0cm\x1d'

An example usage of an encryption algorithm (AES, in this case) is:

>>> from Crypto.Cipher import AES

>>> obj = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')

>>> message = "The answer is no"

>>> ciphertext = obj.encrypt(message)

>>> ciphertext

'\xd6\x83\x8dd!VT\x92\xaa`A\x05\xe0\x9b\x8b\xf1'

>>> obj2 = AES.new('This is a key123', AES.MODE_CBC, 'This is an IV456')

>>> obj2.decrypt(ciphertext)

'The answer is no'

One possible application of the modules is writing secure administration tools. Another application is in writing daemons and servers. Clients and servers can encrypt the data being exchanged and mutually authenticate themselves; daemons can encrypt private data for added security. Python also provides a pleasant framework for prototyping and experimentation with cryptographic algorithms; thanks to its arbitrary-length integers, public key algorithms are easily implemented.

As of PyCrypto 2.1.0, PyCrypto provides an easy-to-use random number generator:

>>> from Crypto import Random

>>> rndfile = Random.new()

>>> rndfile.read(16)

'\xf7.\x838{\x85\xa0\xd3>#}\xc6\xc2jJU'

A stronger version of Python’s standard “random” module is also provided:

>>> from Crypto.Random import random

>>> random.choice(['dogs', 'cats', 'bears'])

'bears'

Caveat: For the random number generator to work correctly, you must call Random.atfork() in both the parent and child processes after using os.fork()

Python 示例

# -*- coding=utf-8-*-

from Crypto.Cipher import AES

import os

from Crypto import Random

import base64

"""

aes加密算法

padding : PKCS5

"""

class AESUtil:

__BLOCK_SIZE_16 = BLOCK_SIZE_16 = AES.block_size

@staticmethod

def encryt(str, key):

cipher = AES.new(key, AES.MODE_ECB)

x = AESUtil.__BLOCK_SIZE_16 - (len(str) % AESUtil.__BLOCK_SIZE_16)

if x != 0:

str = str + chr(x)*x

msg = cipher.encrypt(str)

msg = base64.urlsafe_b64encode(msg).replace('=', '')

return msg

@staticmethod

def decrypt(enStr, key):

cipher = AES.new(key, AES.MODE_ECB)

enStr += (len(enStr) % 4)*"="

decryptByts = base64.urlsafe_b64decode(enStr)

msg = cipher.decrypt(decryptByts)

paddingLen = ord(msg[len(msg)-1])

return msg[0:-paddingLen]

if __name__ == "__main__":

print AESUtil.encryt("512345", "1234567812345678")

print AESUtil.decrypt("1MbqzdK0IzP8vchDgRlzvw", "1234567812345678")

Java 实现

public class SecureUtils {

public static String decryptByAes(String sSrc, String reqKey) {

try {

byte[] raw;

if (reqKey != null) {

raw = reqKey[0].getBytes("ASCII");

} else {

raw = sKey.getBytes("ASCII");

}

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

Cipher cipher = Cipher.getInstance("AES");

cipher.init(Cipher.DECRYPT_MODE, skeySpec);

byte[] encrypted1 = decryptUrlSafe(sSrc);

try {

byte[] original = cipher.doFinal(encrypted1);

String originalString = new String(original);

return originalString;

} catch (Exception e) {

e.printStackTrace();

return null;

}

} catch (Exception ex) {

ex.printStackTrace();

return null;

}

}

public static String encryptByAes(String sSrc, String...reqKey) throws Exception {

byte[] raw;

if (reqKey != null) {

raw = reqKey[0].getBytes("ASCII");

} else {

raw = sKey.getBytes("ASCII");

}

SecretKeySpec skeySpec = new SecretKeySpec(raw, "AES");

Cipher cipher = Cipher.getInstance("AES");

cipher.init(Cipher.ENCRYPT_MODE, skeySpec);

byte[] encrypted = cipher.doFinal(sSrc.getBytes());

return encryptUrlSalf(encrypted);

}

public static byte[] decryptUrlSafe(String key) throws Exception {

String decodeStr = key.replaceAll("-", "+").replaceAll("_", "/");

String qualsStr = "";

for (int i = 0; i < key.length() % 4; i++) {

qualsStr += "=";

}

return Base64.decode(decodeStr + qualsStr);

}

public static String encryptUrlSalf(byte[] key) {

String str = Base64.encode(key);

str = str.replaceAll("\\+", "-").replaceAll("/", "_").replaceAll("=+$", "");

return str;

}

}

参考推荐:

php实现aes ecb模式加密,PHP、Python、Java的AES ECB加密实现-Fun言相关推荐

  1. java aes iv 24位_【JAVA】AES加密 简单实现 AES-128/ECB/PKCS5Padding

    AES加密 AES 是一种可逆加密算法,对用户的敏感信息加密处理. 本文暂不深入AES原理,仅关注JAVA代码实现AES加解密. JAVA代码实现 这是一个在线AES加密网站.从页面上我们可以看到如下 ...

  2. java aes加密 base64_【java】AES加密解密|及Base64的使用

    AES加解密算法,使用Base64做转码以及辅助加密: package com.wintv.common; import javax.crypto.Cipher; import javax.crypt ...

  3. delphi7aes加密解密与java互转_Java 加密/解密Excel

    概述 设置excel文件保护时,通常可选择对整个工作簿进行加密保护,打开文件时需要输入密码:或者对指定工作表进行加密,即设置表格内容只读,无法对工作表进行编辑.另外,也可以对工作表特定区域设置保护,即 ...

  4. java登陆密码加密怎么做,Java如何实现密码加密

    在查询时,我们如果要对用户的登录信息进行加密,通常会将其密码进行加密. 1) 可以借助spring框架工具类DigestUtils 2) 也可以使用shiro框架来实现 以上就是两者方式分别使用, 注 ...

  5. java简单对称加密_聊聊java中的对称加密机制

    对数据的加密算是一个老生常谈的话题了,加密的方式很多,java也为这些加密算法提供了支持.今天就来聊聊对称加密算法的java实现方式.本文对加密算法不了解也没关系,我会从0开始讲解,保证小白也能看懂. ...

  6. 对称加密算法AES - ECB模式

    目录 什么是ECB模式? 如何使用Java 实现ECB模式的AES算法? 加密方法 解密方法 什么是ECB模式? ECB,Electronic Codebook,电码本.ECB模式是分组算法的一种基本 ...

  7. python模拟CryptoJS.AES.decrypt解密

    python模拟CryptoJS.AES.decrypt 思路: 准备工作: 需求 思路: 从CryptoJS源码中抠出python模拟报错的代码 准备工作: 1.安装execjs库 pip inst ...

  8. 实战篇-OpenSSL之TripleDES加密算法-ECB模式

    本文属于<OpenSSL加密算法库使用系列教程>之一,欢迎查看其它文章. 实战篇-OpenSSL之TripleDES加密算法-ECB模式 一.TripleDES简介 二.ECB模式 1.命 ...

  9. python判断网页密码加密方式_Python模拟网页中javascript加密与验证的相关处理

    在做网络爬虫的过程中你是否一些在这方面做的很好的网站,你向知道他是通过哪些相关的操作做出这么好的网站,以下就是文章的相关内容的具体介绍,希望你浏览完下面的内容会有所收获.Python模拟网页的java ...

  10. python做一个【批量加密解密】软件,让你的文件有程序加密保护,在也不怕别人乱翻你的东西了

    今天这个批量加解密很简单,和上一个[软件加密]python制作一个超强的加密软件_₰₯₮ 的博客-CSDN博客 文章结合了一下,然后优化了一下 循环文件夹的所有文件,然后捉个进行加解密 def ite ...

最新文章

  1. Ubuntu升级到18.04
  2. 初学Java ssh之Spring 第三篇
  3. CSS基础——position位置属性
  4. java多语言标签如何动态刷新_WPF实现无刷新动态切换多语言(国际化)
  5. 用JAVA制作微型操作系统4月23日情况
  6. From 百度知道 SQLSERVER 字符集排序规则简单说明
  7. javaone_JavaOne 2012覆盖率
  8. 想当年,我也是斩获20+大厂offer的收割机!
  9. Java cmd常用命令_java cmd常用命令
  10. win7录屏_原来电脑自带的录屏功能,那么好用,可惜很多人还不知道,真遗憾...
  11. MySql 磁盘满了的处理
  12. KVM设备透传与重定向
  13. 创建维基百科,编辑维基百科的四个技巧
  14. Foxmail与QQ邮箱关联创建新账户
  15. 一个空间多个php网站,一个空间多个域名多个网站的办法汇总
  16. SpringBoot读取自定义环境配置信息的方法
  17. mt950报文解析_MT报文有两种格式
  18. 昨日互联网,明日区块链
  19. Excel怎么快速提取出网址
  20. 电路学习1——磁珠的工作原理、磁珠的分类、磁珠的模型、磁珠的参数、磁珠与电感的区别、磁珠的应用、磁珠的误区

热门文章

  1. root面具怎么授权,面具root权限
  2. MCU 上电复位功能的使用注意点
  3. java中国象棋兵吃棋规则_国际象棋兵吃子规则介绍_国际象棋吃子的理论介绍
  4. html 气泡上升效果,css气泡效果
  5. 【Scratch二次开发】03-构建桌面应用
  6. 论文阅读:《Neural Machine Translation by Jointly Learning to Align and Translate》
  7. 推荐几本这个系列封面的编程书,涉及Python、计算机图形学、Linux
  8. CF411H 被遗忘的树 Havel定理 || 网络流
  9. 数据库笔记--常见sql操作
  10. 全面解析NFT的流动性问题与解决方案