实现rc4库 非常简洁,看代码吧 import base64 import hashlib import os from io import BytesIO class RC4(object): yield s[(s[i] + s[j]) % 256] def encrypt(in_stream: BytesIO, out_stream: BytesIO, pwd: str): rc4_ cryptor = RC4(pwd) rc4_cryptor.encode(in_stream, out_stream) def encrypt_str(data: str, pwd: str
前言 项目里需要用到sm4加密,在这里记录一下(springboot)。 Cipher cipher = generateEcbCipher(DECRYPT_MODE, key); return cipher.doFinal(cipherText); } /** * cbc 加密 , ivParameterSpec); return cipher; } /** * ecb 加密 times 次 * @param data * @param salt * @param times NoSuchProviderException | NoSuchAlgorithmException | InvalidKeyException var5) { throw new GeneralSecurityException(“SM4加密失败 ”); } } /** * cbc 加密 times 次 * @param data * @param salt * @param times * @return= */ public static String
iOS RC4加密 iOS RC4加密的实现,要注意加密后生成字符串的步骤,有些要求是base64加密后输出,有些要求是字节数组转16进制字符串输出,所以要特别注意。 代码如下: // rc4加密 - (NSString *)rc4Encode:(NSString *)aInput key:(NSString *)aKey { NSMutableArray * return resultString; } //rc4解密 - (NSString *)rc4Decode:(NSString *)data key:(NSString*)secret{ // 如果是16进制字符串 NSData *raw = [self ByteDataFromString:data]; // 如果是base64加密后字符串 // *data = [NSData dataWithBytes:buf length:len]; free( buf ); return data; } 参考 iOS,objectC,RC4加密解密方法
from Crypto.Cipher import ARC4 as rc4cipher import base64 def rc4_algorithm(encrypt_or_decrypt, data if encrypt_or_decrypt == "encrypt": key = bytes(key1, encoding='utf-8') enc = rc4cipher.new : data = base64.b64decode(data) key = bytes(key1, encoding='utf-8') enc = rc4cipher.new ) return res if __name__ == "__main__": data = '测试' key = 'l2ru8181z' print(rc4_ algorithm('encrypt',data,key)) res ='dLzb09qr' print(rc4_algorithm('decrypt', res, key))
特点:简单高效:RC4算法的实现相对简单,运行速度快,适用于资源有限的设备和环境,对实时性要求比较高的应用场景。对称加密:RC4算法是一种对称加密算法,使用相同的密钥进行加密和解密。 长度无限制:RC4算法对于加密/解密数据的长度没有限制,适合于加密数据流。实现简单:RC4算法的实现简单,只需要一个密钥和一个初始化向量。 应用场景:无线通信领域中:RC4算法被用于保护Wi-Fi网络的安全。在SSL加密中:RC4算法是一种可选的加密算法。在游戏保护中:RC4算法可以用于加密游戏关键数据。 在电子商务中:RC4算法可以用于加密信用卡等敏感信。 互联网通信:RC4算法可以用于保护互联网通信的安全性,例如SSL/TLS协议中的RC4加密套件。数据加密:RC4算法可以用于对数据进行加密,例如文件加密、数据库加密等。
//身份证、手机号SM4加密存储 sysBfinfo.setLeaderIdcard(SM4Util.encryptEcb(SM4Util.hexKey,sysBfinfo.getLeaderIdcard PROVIDER_NAME = "BC"; public static final String ALGORITHM_NAME = "SM4"; // 加密算法/分组加密模式/分组填充方式 NoSuchAlgorithmException | InvalidKeyException var5) { throw new GeneralSecurityException("SM4加密失败 "); } } /** * sm4加密 * @explain 加密模式:ECB 密文长度不固定,会随着被加密字符串长度的变化而变化 * @ param hexKey 16进制密钥(忽略大小写) * @param paramStr 待加密字符串 * @return 返回16进制的加密字符串 */ public
MD5 import hashlib c = raw_input('输入字符:') #python3为input b = hashlib.md5() b.update(c.encode (encoding='utf-8')) print ('MD5加密前:'+ c) print ('MD5加密后:'+b.hexdigest()) Base64 import base64 base64加密 print base64.b64encode("aaa") #base64加密 print base64.b64decode("YWFh") Base32 import base64 print base32.b32encode('aa') #base32加密 print base32.b32decode('MFQWC===') #base64解密 SHA1 ('SHA1加密前:'+a) print ('SHA1加密后:'+b.hexdigest()) 特注: SHA1与MD5都是摘要算法,且为不可逆算法; 应用角度来讲,适用性比安全性重要
python 进行aes 加密报错, windows pip install pycryptodome 安装Crypto linux pip install pycrypto 1 import base64 2 3 from Crypto.Cipher import AES 4 5 6 def add_to_16(value): 7 while len(value) % 16 ! = 0: 8 value += '\0' 9 return str.encode(value) 10 11 # 加密方法 12 def encrypt_oracle(self
对称加密、加密算法主要可以分为两种,一个是非对称加密算法,另一个就是对称加密算法。 对称加密简单来说就是有一个明文,通过一个密钥加密之后得到一个密文,这个密文可以通过相同的密要解密得出和原来相同的明文 二、sm4算法 算法定义:SM4算法是一种分组密码算法。 SM4算法加/解密算法的结构相同,只是使用轮密钥相反,其中解密轮密钥是加密轮密钥的逆序。 (plaintext).trim(); } /** * SMS4加密,加密字符数组 * * @param plaintext 字节数组形式的明文 * @param key 秘钥 * @return sm4 = new Sm4Util(); sm4.sms4(ciphering, 16, key, plain, DECRYPT); return plain; } /** * 只加密32位明文 *
最近在写接口的时候,遇到了需要使用RSA加密和PBE加密的情况,对方公司提供的DEMO都是JAVA的,我需要用python来实现。 在网上搜了一下,python的RSA加密这块写的还是比较多的,但是PBE较少。所以我就讲讲我在RSA加密上面遇到的坑,大家权当一乐。PBE加密里面的盐、密钥。 RSA 什么是RSA加密呢? 我们注意到,他的加密方法是:SIGNATURE_ALGORITHM = "MD5withRSA",所以我们的python签名也是需要进行MD5的。 有一个盐:对应的python盐为:"\xA9\x9B\xC8\x32\x56\x35\xE3\x03" 对应的python2.7代码: from Crypto.Hash import MD5 from 在python3的代码中,str是不能直接进行hash的,所以要抓换成utf-8进行加密,而且最后的encrypted没有encode方法,只能手动进行Base64编码。
SM4加密算法 密码算法中常用的一些数据单位: 位/比特/bit:指一个二进制位。 字节/byte:1字节=8位 [公式] 字/word:1字=4字节=32位 [公式] SM4是一种分组密码算法,其分组长度为128位(即16字节,4字),密钥长度也为128位(即16字节,4字)。 加密过程分为两步,由32次轮迭代和1次反序变换组成。 SM4的解密过程与加密过程完全相同,也包括32轮迭代和一次反序变换。只是在轮迭代的时候,需要将轮密钥逆序使用。 1.69</version> </dependency> 代码块 @Test void contextLoads() { String content="123456"; SM4 sm4 = SmUtil.sm4(); String encryptHex = sm4.encryptHex(content); String decryptStr = sm4.decryptStr
SM4加密算法实现Java和C#相互加密解密 近期由于项目需要使用SM4对数据进行加密,然后传给Java后台,Java后台使用的也是SM4的加密算法但是就是解密不正确,经过一步步调试发现Java中好多数据类型与 ,那就让他们使用同一个语言进行加密解密,就是加密和解密都是用C#就可以完美的解决了。 C#SM4加密代码 下面详细解释各个类。 Org.BouncyCastle.Utilities.Encoders; namespace SM4 { public class MainSm4 { /// /// 加密ECB模式 /// (plainText.getBytes(),”ASCII”)); } //System.out.println(“测试返回结果:”+cipherText); } } OK完美实现Java和C#的SM4加密解密问题
x93*\xeai\x8d\xec\xeb\xb2+\x8d\x01\xa5\xdeO\xc2\x87\x81\x19\xf9\x96\x14h\xf6\xa2\x14.Q>K\x92\xcdd\xa4\ +\xea\xb7)\x8f\xa5iN\xedY%#\xcdE\xae\xc1#\x9d\xb2\xd9\xe4C)|\xc2[$\xb1\x04\xc1|a\x99B\xbf\x0c\x95\x85 \x96A\x99f_\xfa(\x0f\x00\x9av\x07\x82\xcb\x8b\x8b\xd9\xfe\xd23\xb9\x8a\x0b\x17\x89\x9d\x88\xc4? \x88c\xf4\x89eO\x1a\x84\xec\x08\xffZ6\xefL\x08! xce\xb1%A\x1d\xaf\x03+(\x17\xb1\xb4l\xa2\x94\xf1B\xca\x95\xd6\xd4\xbb\xbc\x87p\xbd\xe8<u-b\x10\xfc\xdb
hmac — 加密消息签名和验证 目的:hmac 模块实现用于消息验证的密钥散列,如 RFC 2104 中所述。 HMAC 算法可用于验证在应用程序之间传递或存储在潜在易受攻击位置的信息的完整性。 基本思想是生成与共享密钥组合的实际数据的加密散列。然后,可以使用所得到的散列来检查所发送或存储的消息以确定信任级别,而不发送秘密密钥。 签名消息 new() 函数创建一个用于计算消息签名的新对象。 $ python3 hmac_simple.py 4bcb287e284f8c21e87e14ba2dc40b16 可选的摘要类型 尽管默认的 hmac 算法是 MD5,但那不是最安全的方法。 $ python3 hmac_sha.py dcee20eeee9ef8a453453f510d9b6765921cf099 二进制摘要 前一个例子使用了 hexdigest() 方法生成可打印的摘要字符串 $ python3 hmac_base64.py b'olW2DoXHGJEKGU0aE9fOwSVE/o4=\n' 消息签名的应用 HMAC 算法应该用于任何公共网络服务,并且任何数据都应该存储在安全性很重要的地方
生活中,有时候我们需要对一些重要的文件进行加密,Python 提供了诸如 hashlib,base64 等便于使用的加密库。 基础知识 在 Python 中异或操作符为:^,也可以记作 XOR。按位异或的意思是:相同值异或为 0,不同值异或为 1。 原理 通过了解异或操作的性质,加密原理就非常清晰了。 加密操作: 首先将文件转换成二进制数,再生成与该二进制数等长的随机密钥,将二进制数与密钥进行异或操作,得到加密后的二进制数。 生成随机密钥: secrets 库是 Python 3.6 引入的伪随机数模块,适合生成随机密钥。token_bytes 函数接受一个 int 参数,用于指定随机字节串的长度。 、解密文件操作,得到的解密文件与原文件相同,示意图如下: 32a350b6f9ed4d0e615ecb3fe2a4960.png
DES/CBC/pkcs5padding加解密 DES加密模式 加密模式:DES/CBC/pkcs5padding 加解密在线工具:http://tool.chacuo.net/cryptdes 需知道加密的密码 pip install pyDes==2.0.1 python代码实现DES加解密 from pyDes import des, CBC, PAD_PKCS5 import binascii """ """ DES 加密 :param s: 原始字符串 :param key: 加密密钥8位 :return: 加密后字符串,16进制 """ secret_key 加密后的数据通过 base64 模块进行编码转换,解密前需要先进行解码。需要注意的是,在实际应用中,需要对秘钥和数据进行适当的保护和传输加密,以确保数据的安全性。 = des.encrypt(data) print('加密后的数据:', encrypted_data) # 对加密后的数据进行 base64 编码 encrypted_data_base64 = base64
hashlib — 加密哈希算法 目标:加密哈希与信息摘要 hashlib 哈希库模块提供了许多哈希算法的 API 支持。哈希算法在中文又被称为散列函数 / 算法,此译文中将统称哈希。 sha384, sha3_224, sha3_256, sha3_384, sha3_512, sha512, shake_128, shake_256 Available: DSA, DSA-SHA, MD4, SHA1, SHA224, SHA256, SHA384, SHA512, blake2b, blake2s, dsaEncryption, dsaWithSHA, ecdsa-with-SHA1, md4, $ python3 hashlib_md5.py 3f2fd2c9e25d60fb0fa5d593b802b7a8 SHA1 例子 一个 SHA1 摘要是以相似的方式计算出来的。 $ python3 hashlib_new.py sha512 a7e53384eb9bb4251a19571450465d51809e0b7046101b87c4faef96b9bc904cf7f90
AES是一种对称加密算法。它涉及四个计算步骤,分别是替换字节、行移位、列混排和轮密钥加密。整个加密过程中会不断迭代重复上述四个步骤。解密过程就是上述加密步骤的逆运算。 这里采用pycryptodome库来进行AES加密 from Crypto.Cipher import AES from Crypto import Random #补齐16字节,必须是16的倍数 plaintext = '红红火火恍恍惚惚' print('原文:', plaintext) msg = cipher.encrypt(fill_text(plaintext.encode())) print('加密后的字节码 :', msg) text = cipher.decrypt(msg) print('解密后的文本:', text.decode()) 执行结果 原文: 红红火火恍恍惚惚 加密后的字节码: b'\xe0 ,-&\x0e\xc0w\xf4\x16\xd3\n\xab\x9d\x156x.NK\x8c\xa8\xb9\xa7~\xa8%y+\xa1\t@\xee' 解密后的文本: 红红火火恍恍惚惚
文章目录 ECB模式加密: ECB模式解密: CBC模式加密: CBC模式解密: CFB模式加密: CFB模式解密: AES加密,用的是第三方模块 pycryptodome 安装:pip install (en_text) #将返回的字节型数据转进行base64编码 #b'Cw8uH2ODLS+sBCOJUXOM7A==\n' en_text = en_text.decode('utf8') #转换成python mode = AES.MODE_CBC #定义模式 key = '1234567890123456'.encode('utf-8') #秘钥 ##秘钥:必须是16位字节或者24位字节或者32位字节(因为python3 字符集的,输出保存可能存在问题,所以这里转为16进制字符串 #b'f774a01820842dcc6f2d91f5db89e388' en_text = x.decode('utf-8') #转换成python 字符集的,输出保存可能存在问题,所以这里转为16进制字符串 #b'0c9eca5797060a9fdec0dd911e68110c' en_text = x.decode('utf-8') #转换成python
呃,今天来看看加密和解密,本文讨论base64和hashlib库: 来看看HASHLIB,他是一种单向摘要出定长字符串的方法: 撸代码: In [18]: import time,hashlib hashlib.md5('test123%s' %t) In [28]: md.hexdigest() Out[28]: '554aac9fa6ba5a5821f6a80e840b6b36' 相同字符串md5加密后的