加密解密常用函数
Python常用base64md5aesdescrc32加密解密方法汇总
Python常⽤base64md5aesdescrc32加密解密⽅法汇总1.base64Python内置的base64模块可以实现base64、base32、base16、base85、urlsafe_base64的编码解码,python 3.x通常输⼊输出都是⼆进制形式,2.x可以是字符串形式。
base64模块的base64编码、解码调⽤了binascii模块,binascii模块中的b2a_base64()函数⽤于base64编码,binascii模块中的a2b_base64()函数⽤于base64解码。
>>>import base64>>> s = 'hello,word!'>>> base64.b64encode(bytes(s,'ascii')) #base64编码,编码的字符串必须是⼆进制形式的b'aGVsbG8sd29yZCE='>>> base64.b64decode(b'aGVsbG8sd29yZCE=') #base64解码b'hello,word!'2.md5Python2.x中有md5模块,此模块调⽤了hashlib模块,python3.x已中将md5取掉,直接通过调⽤hashlib模块来进⾏md5。
Python2.x可以直接使⽤unicode字符,但3.x中必须使⽤⼆进制字节串。
>>> import hashlib>>> m = hashlib.md5()>>> m.update(b'hello,word!')>>> m.hexdigest()'9702d6722a0901398efd4ecb3a20423f'注意:每调⽤⼀次update(s),相当于给md5对象m增加了s。
Python中如何使用RSA算法进行加密和解密
Python中如何使用RSA算法进行加密和解密RSA算法是一种非对称加密算法,它是由Ron Rivest、Adi Shamir和Leonard Adleman在1977年提出。
它被广泛用于网络通信、数字签名、身份验证等领域。
Python语言可以很方便地使用RSA算法进行加密和解密,本文将详细介绍如何在Python中使用RSA算法。
一、RSA算法原理RSA算法的核心原理是利用欧拉定理和模运算,实现非对称加密。
具体过程如下:1.选择两个质数p和q,计算N=p*q,并求出其欧拉函数φ(N)=(p-1)*(q-1)。
2.选择一个整数e,使得1<e<φ(N),且e和φ(N)互质。
3.计算e关于φ(N)的模反元素d,即d*e=1 mod φ(N)。
4.公钥为(p, q, e),私钥为(p, q, d)。
5.加密时,将明文m用公钥加密成密文c:c=m^e mod N。
6.解密时,将密文c用私钥解密成明文m:m=c^d mod N。
二、Python中使用RSA算法Python中使用RSA算法,需要使用pycryptodome库。
安装方法如下:pip install pycryptodome使用方法如下:1.生成密钥对使用RSA模块中的generate函数生成RSA密钥对。
如下:from Crypto.PublicKey import RSAkey = RSA.generate(2048)其中,2048为密钥长度,可以根据需要设置。
2.获取公钥和私钥生成密钥对之后,可以使用exportKey函数获取公钥和私钥。
如下:public_key = key.publickey().exportKey()private_key = key.exportKey()此时,public_key为公钥,private_key为私钥。
3.加密和解密使用RSA密钥对进行加密和解密时,需要使用RSA模块中的encrypt和decrypt函数。
C语言加密与解密算法
C语言加密与解密算法在计算机科学与信息安全领域,加密与解密算法起着至关重要的作用。
加密算法用于将原始数据转换为不可读的密文,而解密算法则用于将密文还原为可读的原始数据。
C语言是一种常用的编程语言,具备高效性和灵活性,适用于加密与解密算法的开发。
本文将介绍几种常用的C语言加密与解密算法。
一、凯撒密码算法凯撒密码算法是一种最简单的替换加密算法,通过将字母按照固定的偏移量进行替换来实现加密与解密。
以下是一个简单的C语言凯撒密码实现例子:```c#include <stdio.h>void caesarEncrypt(char* message, int key) {int i = 0;while (message[i] != '\0') {if (message[i] >= 'a' && message[i] <= 'z') {message[i] = (message[i] - 'a' + key) % 26 + 'a';} else if (message[i] >= 'A' && message[i] <= 'Z') {message[i] = (message[i] - 'A' + key) % 26 + 'A';}i++;}}void caesarDecrypt(char* message, int key) {int i = 0;while (message[i] != '\0') {if (message[i] >= 'a' && message[i] <= 'z') {message[i] = (message[i] - 'a' - key + 26) % 26 + 'a'; } else if (message[i] >= 'A' && message[i] <= 'Z') {message[i] = (message[i] - 'A' - key + 26) % 26 + 'A'; }i++;}}int main() {char message[] = "Hello, World!";int key = 3;printf("Original message: %s\n", message);caesarEncrypt(message, key);printf("Encrypted message: %s\n", message);caesarDecrypt(message, key);printf("Decrypted message: %s\n", message);return 0;}```以上程序演示了凯撒密码的加密与解密过程,通过指定偏移量实现对消息的加密与解密。
如何通过MySQL实现数据的加密和解密
如何通过MySQL实现数据的加密和解密如何通过MySQL实现数据的加密和解密?在当前信息时代,数据安全问题成为了亟待解决的难题。
对于数据库中的敏感数据,如用户密码、银行账号等,我们需要进行加密处理以确保其安全。
MySQL 是一款常用的关系型数据库管理系统,本文将介绍如何通过MySQL实现数据的加密和解密,来保护我们的数据。
一、MySQL的加密函数MySQL提供了多种加密函数,常用的包括MD5、SHA1、AES等。
这些函数可以将明文数据进行加密,生成对应的密文。
下面简要介绍几种常用的加密函数:1. MD5加密函数MD5是一种常用的哈希函数,它可以将任意长度的数据转换为固定长度的哈希值。
在MySQL中,我们可以使用MD5函数对数据进行加密,例如:```SELECT MD5('password');```该语句将返回明文密码“password”的MD5加密结果。
2. SHA1加密函数类似于MD5,SHA1也是一种常用的哈希函数。
在MySQL中,我们可以使用SHA1函数对数据进行加密,例如:```SELECT SHA1('password');```该语句将返回明文密码“password”的SHA1加密结果。
3. AES加密函数AES是一种对称加密算法,它可以将明文数据加密为密文,并且可以通过密钥对密文进行解密得到原始数据。
在MySQL中,我们可以使用AES_ENCRYPT和AES_DECRYPT函数进行加密和解密操作。
例如:```SELECT AES_ENCRYPT('password', 'key');SELECT AES_DECRYPT(encrypted_data, 'key');```以上两条语句分别将明文密码“password”使用密钥“key”进行加密和解密。
二、数据库表的字段加密在实际应用中,我们常常需要对数据库表中的某些字段进行加密处理,以保护敏感数据。
SQLSERVER加密解密函数(非对称密钥证书加密对称密钥)
SQLSERVER加密解密函数(⾮对称密钥证书加密对称密钥)ENCRYPTBYASYMKEY() --⾮对称密钥ENCRYPTBYCERT() --证书加密ENCRYPTBYKEY() --对称密钥ENCRYPTBYPASSPHRASE() --通⾏短语(PassPhrase)加密--⾮对称密钥包含数据库级的内部公钥和私钥,它可以⽤来加密和解密SQL Server数据库中的数据,它可以从外部⽂件或程序集中导⼊,也可以在SQL Server数据库中⽣成。
它不像证书,不可以备份到⽂件。
这意味着⼀旦在SQL Server中创建了它,没有⾮常简单的⽅法在其他⽤户数据库中重⽤相同的密钥。
⾮对称密钥对于数据库加密属于⾼安全选项,因⽽需要更多的SQL Server资源。
⼀、⾮对称密钥--我们看⼀组例⼦:--⽰例⼀、创建⾮对称密钥--创建⾮对称密钥使⽤如下命令:--CREATE ASYMMETRIC KEY--以下语句创建⼀个⾮对称密钥asymDemoKeyuse[pratice]goCREATE ASYMMETRIC KEY asymDemoKey --创建⾮对称密钥名称WITH ALGORITHM = RSA_512 --加密安全类型ENCRYPTION BY PASSWORD ='123!'--密码--⽰例⼆、查看当前数据库中的⾮对称密钥--查看当前数据库中的⾮对称密钥USE[pratice]goSELECT name, algorithm_desc, pvt_key_encryption_type_descFROM sys.asymmetric_keys--⽰例三、修改⾮对称密钥的私钥密码--你可以使⽤带有ENCRYPTION BY PASSWORD和DECRYPTION BY PASSWORD选项的--修改私钥密码ALTER ASYMMETRIC KEY asymDemoKey--要修改的密钥名称WITH PRIVATE KEY--私钥(ENCRYPTION BY PASSWORD ='456',--指定新密码DECRYPTION BY PASSWORD ='123!')--旧密码是⽤来解密的--⽰例四、使⽤⾮对称密钥对数据进⾏加密和解密。
VBA中的数据加密与解密技巧
VBA中的数据加密与解密技巧在VBA编程中,数据的安全性是至关重要的。
为了保护敏感信息,我们经常需要对数据进行加密和解密。
本文将介绍VBA中常用的数据加密和解密技巧,帮助您保护您的数据。
1. 使用密码加密数据使用密码对数据进行加密是最常见的方法之一。
在VBA中,我们可以使用常见的加密算法,如AES、DES或者RSA等,通过将密码应用于数据来加密它们。
下面是一个使用AES加密算法的示例:Sub EncryptData()Dim Data As StringDim Password As StringDim EncryptedData As StringData = "需要加密的数据"Password = "密码"EncryptedData = AesEncrypt(Data, Password)' 将加密后的数据保存到文件中或者进行其他处理' ...End SubFunction AesEncrypt(Data As String, Password As String) As String' 实现AES加密算法的代码End Function在这个示例中,我们使用了一个名为AesEncrypt的函数来实现AES 加密算法。
您可以根据需要选择不同的加密算法,并根据相应的算法修改代码中的实现部分。
2. 使用哈希函数哈希函数在数据加密中也起着重要的作用。
它们将数据转换为固定长度的哈希值,这个哈希值可以用来验证数据的完整性。
VBA中有许多常见的哈希函数可供选择,如MD5、SHA-1或SHA-256等。
下面是一个使用SHA-256哈希函数的示例:Sub HashData()Dim Data As StringDim HashValue As StringData = "需要哈希的数据"HashValue = Sha256Hash(Data)' 将哈希值保存到文件中或者进行其他处理' ...End SubFunction Sha256Hash(Data As String) As String' 实现SHA-256哈希函数的代码End Function在这个示例中,我们使用了一个名为Sha256Hash的函数来实现SHA-256哈希函数。
rsa_public_decrypt 用法-概述说明以及解释
rsa_public_decrypt 用法-概述说明以及解释1.引言1.1 概述RSA公钥加密算法是一种非对称加密算法,广泛应用于信息安全领域。
在RSA算法中,公钥用于加密数据,私钥用于解密数据。
而rsa_public_decrypt函数则是用于通过公钥解密数据的函数。
本文将详细介绍rsa_public_decrypt函数的用法及其在信息安全领域的应用。
在现代信息社会中,数据的安全性越来越受到重视。
加密算法就是一种保护数据安全的重要手段。
RSA公钥加密算法作为一种典型的非对称加密算法,具有较高的安全性和广泛的应用范围。
而rsa_public_decrypt 函数则是RSA算法中实现公钥解密的一个重要函数。
了解rsa_public_decrypt函数的用法及其在实际应用中的作用,有助于更好地保护数据的安全。
本文将对RSA算法进行简要介绍,并重点介绍rsa_public_decrypt函数的用法及其在信息安全领域的重要性。
希望通过本文的阐述,读者能够更深入地了解和应用RSA公钥加密算法,提高数据安全性,保护个人隐私信息。
1.2 文章结构本文将分为三个主要部分来介绍rsa_public_decrypt函数的用法。
首先,在引言部分概述了文章的背景和目的,以及文章结构的安排。
接着,在正文部分,我们将会先介绍RSA算法的基本原理和流程,然后详细介绍rsa_public_decrypt函数的功能和参数,最后讲解如何使用这个函数进行公钥解密操作。
最后,在结论部分,我们将总结本文的主要内容,讨论rsa_public_decrypt函数的应用场景,并展望未来可能的发展方向。
通过本文的阐述,读者将能够更全面地了解rsa_public_decrypt函数的用法及其在实际应用中的重要性。
1.3 目的在这篇文章中,我们的主要目的是介绍和探讨rsa_public_decrypt函数的用法。
RSA算法作为一种非对称加密算法,在数据加密和解密中有着广泛的应用。
浅谈常见的七种加密算法及实现
浅谈常见的七种加密算法及实现在信息安全领域,加密算法是保护数据安全性的重要手段。
以下是常见的七种加密算法及其实现。
1. 对称加密算法:对称加密算法使用相同的密钥进行加密和解密。
常见的对称加密算法有DES、AES、Blowfish等。
以AES算法为例,其实现如下:```from Crypto.Cipher import AESfrom Crypto.Random import get_random_byteskey = get_random_bytes(16)cipher = AES.new(key, AES.MODE_EAX)plaintext = b'This is a secret message'ciphertext, tag = cipher.encrypt_and_digest(plaintext)print('Ciphertext:', ciphertext)decipher = AES.new(key, AES.MODE_EAX, cipher.nonce)plaintext = decipher.decrypt_and_verify(ciphertext, tag)print('Decrypted plaintext:', plaintext)```2. 非对称加密算法:非对称加密算法使用一对密钥,其中一个用于加密,另一个用于解密。
常见的非对称加密算法有RSA和ElGamal等。
以RSA算法为例,其实现如下:```from Cryptodome.PublicKey import RSAfrom Cryptodome.Cipher import PKCS1_OAEPkey = RSA.generate(2048)private_key = key.export_keypublic_key = key.publickey(.export_keycipher = PKCS1_OAEP.new(key.publickey()ciphertext = cipher.encrypt(b'This is a secret message')print('Ciphertext:', ciphertext)decipher = PKCS1_OAEP.new(key)plaintext = decipher.decrypt(ciphertext)print('Decrypted plaintext:', plaintext)```3.哈希函数:哈希函数将任意长度的输入映射为固定长度的输出,常用于数据完整性校验和数字签名等。
医疗信息系统的数据加密与解密方法(四)
医疗信息系统的数据加密与解密方法引言:随着现代科技的飞速发展,医疗信息系统的应用日益广泛,涉及的数据也变得越来越庞大和重要。
然而,随之而来的安全威胁也日益增加。
为了保护患者隐私和医疗机构的敏感数据,医疗信息系统的数据加密与解密方法显得尤为重要。
本文将探讨医疗信息系统中常用的几种数据加密与解密方法。
一、对称加密算法对称加密算法是目前医疗信息系统中最常用的加密方法之一。
它采用相同的密钥对数据进行加密和解密。
其中,DES(DataEncryption Standard)和AES(Advanced Encryption Standard)是最著名的对称加密算法。
DES算法具有安全性较高的特点,但其密钥长度较短,易受到暴力破解的攻击;而AES算法在保证安全性的同时,保留了对系统资源的较高利用率。
二、非对称加密算法非对称加密算法是一种采用不同密钥的加密方法,包括公钥和私钥。
公钥用于加密数据,私钥用于解密数据。
最常用的非对称加密算法是RSA算法。
与对称加密算法相比,非对称加密算法具有更高的安全性,但同时也带来了更高的计算开销。
为了提供医疗信息系统的实时性能,常常将对称加密算法与非对称加密算法结合使用。
三、哈希函数哈希函数是将任意长度的数据映射为固定长度的哈希值的函数。
医疗信息系统中,哈希函数常用于校验数据的完整性,防止数据被篡改。
MD5和SHA-1是最常见的哈希函数。
然而,由于MD5和SHA-1算法在一些情况下存在碰撞问题,从而导致安全性受到威胁,因此在实际应用中,应选择更安全的哈希函数算法,如SHA-256。
四、数字证书数字证书是在医疗信息系统中进行身份验证和加密传输的重要手段。
数字证书含有数字签名、公钥和证书发布者等信息。
通过数字证书,可以验证数据的真实性和完整性,并保证通信双方的身份安全。
常见的数字证书标准有和PKCS。
五、混合加密技术为了进一步提高医疗信息系统中数据的加密安全性,常常使用混合加密技术。
VC对密码加密和解密函数
CString CDlgLogin::Decrypt(CString S, WORD Key){CString Result,str;int i,j;Result.Empty(); //清除结果for(i=0; i < S.GetLength()/2; i++) // 将字符串两个字母一组进行处理{j = ((BYTE)S.GetAt(2*i)-65)*26;j += (BYTE)S.GetAt(2*i+1)-65;str="1"; // 设置str长度为1str.SetAt(0, j);Result+=str; // 追加字符,还原字符串}S=Result; // 保存中间结果for(i=0; i<S.GetLength(); i++) // 依次对字符串中各字符进行操作{Result.SetAt(i, (BYTE)S.GetAt(i)^(Key>>8)); // 将密钥移位后与字符异或Key = ((BYTE)S.GetAt(i)+Key)*C1+C2; // 产生下一个密钥}return Result;}CString CDlgLogin::Decrypt(CString S, WORD Key) // 解密函数{CString Result,str;int i,j;Result.Empty(); // 清楚结果for(i=0; i < S.GetLength()/2; i++) // 将字符串两个字母一组进行处理{j = ((BYTE)S.GetAt(2*i)-65)*26;j += (BYTE)S.GetAt(2*i+1)-65;str="1"; // 设置str长度为1str.SetAt(0, j);Result+=str; // 追加字符,还原字符串}S=Result; // 保存中间结果for(i=0; i<S.GetLength(); i++) // 依次对字符串中各字符进行操作{Result.SetAt(i, (BYTE)S.GetAt(i)^(Key>>8)); // 将密钥移位后与字符异或Key = ((BYTE)S.GetAt(i)+Key)*C1+C2; // 产生下一个密钥}return Result;}。
加密解密常用函数
本帖最后由小平于2013-6-22 10:05 编辑#region DES加密解密/// <summary>/// DES加密/// </summary>/// <param name="strSource">待加密字串</param>/// <param name="key">32位Key值</param>/// <returns>加密后的字符串</returns>public string DESEncrypt(string strSource){return DESEncrypt(strSource, DESKey);}public string DESEncrypt(string strSource, byte[] key){SymmetricAlgorithm sa = Rijndael.Create();sa.Key = key;sa.Mode = CipherMode.ECB;sa.Padding = PaddingMode.Zeros;MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, sa.CreateEncryptor(), CryptoStreamMode.Write);byte[] byt = Encoding.Unicode.GetBytes(strSource);cs.Write(byt, 0, byt.Length);cs.FlushFinalBlock();cs.Close();return Convert.ToBase64String(ms.ToArray());}/// <summary>/// DES解密/// </summary>/// <param name="strSource">待解密的字串</param> /// <param name="key">32位Key值</param>/// <returns>解密后的字符串</returns>public string DESDecrypt(string strSource){return DESDecrypt(strSource, DESKey);}public string DESDecrypt(string strSource, byte[] key) {SymmetricAlgorithm sa = Rijndael.Create();sa.Key = key;sa.Mode = CipherMode.ECB;sa.Padding = PaddingMode.Zeros;ICryptoTransform ct = sa.CreateDecryptor();byte[] byt = Convert.FromBase64String(strSource);MemoryStream ms = new MemoryStream(byt);CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Read);StreamReader sr = new StreamReader(cs, Encoding.Unicode);return sr.ReadToEnd();}#endregion#region 一个用hash实现的加密解密方法/// <summary>/// 加密/// </summary>/// <param name="src"></param>/// <returns></returns>public static string EncryptStrByHash(string src){if (src.Length == 0){return "";}byte[] HaKey = System.Text.Encoding.ASCII.GetBytes((src + "Test").ToCharArray());byte[] HaData = new byte[20];HMACSHA1 Hmac = new HMACSHA1(HaKey);CryptoStream cs = new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write);try{cs.Write(HaData, 0, HaData.Length);}finally{cs.Close();}string HaResult = System.Convert.ToBase64String(Hmac.Hash).Substring(0, 16);byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray());byte[] RiDataBuf = System.Text.Encoding.ASCII.GetBytes(src.ToCharArray());byte[] EncodedBytes = { };MemoryStream ms = new MemoryStream();RijndaelManaged rv = new RijndaelManaged();cs = new CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey),CryptoStreamMode.Write);try{cs.Write(RiDataBuf, 0, RiDataBuf.Length);cs.FlushFinalBlock();EncodedBytes = ms.ToArray();}finally{ms.Close();cs.Close();}return HaResult + System.Convert.ToBase64String(EncodedBytes); }/// <summary>/// 解密/// </summary>/// <param name="src"></param>/// <returns></returns>public static string DecrypStrByHash(string src){if (src.Length < 40) return "";byte[] SrcBytes = System.Convert.FromBase64String(src.Substring(16));byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(src.Substring(0, 16).ToCharArray());byte[] InitialText = new byte[SrcBytes.Length];RijndaelManaged rv = new RijndaelManaged();MemoryStream ms = new MemoryStream(SrcBytes);CryptoStream cs = new CryptoStream(ms, rv.CreateDecryptor(RiKey, RiKey), CryptoStreamMode.Read);try{cs.Read(InitialText, 0, InitialText.Length);}finally{ms.Close();cs.Close();}System.Text.StringBuilder Result = new System.Text.StringBuilder();for (int i = 0; i < InitialText.Length; ++i) if (InitialText > 0) Result.Append((char)InitialText);return Result.ToString();}/// <summary>/// 对加密后的密文重新编码,如果密文长>16,则去掉前16个字符,如果长度小于16,返回空字符串/// </summary>/// <param name="s"></param>/// <returns></returns>public string ReEncryptStrByHash(string s){string e = Encrypt.EncryptStrByHash(s);return ((e.Length > 16) ? e.Substring(16) : "");}#endregion#region Md5加密,生成16位或32位,生成的密文都是大写public static string Md5To16(string str){MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();string t2 = BitConverter.ToString(puteHash(UTF8Encoding.Default.GetBytes(str)), 4, 8);t2 = t2.Replace("-", ""); return t2;}//// <summary>/// MD5 32位加密/// </summary>/// <param name="str"></param>/// <returns></returns>public static string Md5To32(string str){string pwd = "";MD5 md5 = MD5.Create();byte[] s = puteHash(Encoding.UTF8.GetBytes(str));for (int i = 0; i < s.Length; i++){pwd = pwd + s.ToString("X");}return pwd;}#endregion#region 3DES加密解密public string Encrypt3DES(string str){//密钥string sKey = "wyw308";// //矢量,可为空string sIV = "scf521";// //构造对称算法SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();ICryptoTransform ct;MemoryStream ms;CryptoStream cs;byte[] byt;mCSP.Key = Convert.FromBase64String(sKey);mCSP.IV = Convert.FromBase64String(sIV);mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);byt = Encoding.UTF8.GetBytes(str);ms = new MemoryStream();cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);cs.Write(byt, 0, byt.Length); cs.FlushFinalBlock();cs.Close();return Convert.ToBase64String(ms.ToArray());}/// <summary>/// 带指定密钥和矢量的3DES加密/// </summary>/// <param name="str"></param>/// <param name="sKey"></param>/// <param name="sIV"></param>/// <returns></returns>public string Encrypt3DES(string str, string sKey, string sIV){SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();ICryptoTransform ct;MemoryStream ms;CryptoStream cs;byte[] byt;mCSP.Key = Convert.FromBase64String(sKey);mCSP.IV = Convert.FromBase64String(sIV);mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7; ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);byt = Encoding.UTF8.GetBytes(str);ms = new MemoryStream();cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);cs.Write(byt, 0, byt.Length);cs.FlushFinalBlock();cs.Close();return Convert.ToBase64String(ms.ToArray());}//解密public string Decrypt3DES(string Value){string sKey = "wyw308";string sIV = "scf521";SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();ICryptoTransform ct;MemoryStream ms;CryptoStream cs;byte[] byt;mCSP.Key = Convert.FromBase64String(sKey);mCSP.IV = Convert.FromBase64String(sIV);mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);byt = Convert.FromBase64String(Value);ms = new MemoryStream();cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);cs.Write(byt, 0, byt.Length);cs.FlushFinalBlock();cs.Close();return Encoding.UTF8.GetString(ms.ToArray());}/// <summary>/// 带指定密钥和矢量的3DES解密/// </summary>/// <param name="Value"></param>/// <param name="sKey"></param>/// <param name="sIV"></param>/// <returns></returns>public string Decrypt3DES(string str, string sKey, string sIV){SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();ICryptoTransform ct; MemoryStream ms;CryptoStream cs;byte[] byt;mCSP.Key = Convert.FromBase64String(sKey);mCSP.IV = Convert.FromBase64String(sIV);mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);byt = Convert.FromBase64String(str);ms = new MemoryStream();cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);cs.Write(byt, 0, byt.Length);cs.FlushFinalBlock();cs.Close();return Encoding.UTF8.GetString(ms.ToArray());}#endregion#region 一个简单的加密解密方法,只支持英文public static string EnCryptEnStr(string str) //倒序加1加密{byte[] by = new byte[str.Length]; for (int i = 0;i <= str.Length - 1;i++){by = (byte)((byte)str + 1);}str = "";for (int i = by.Length - 1;i >= 0;i--){str += ((char)by).ToString();}return str;}public static string DeCryptEnStr(string str) //顺序减1解码 {byte[] by = new byte[str.Length];for (int i = 0;i <= str.Length - 1;i++){by= (byte)((byte)str - 1);}str = "";for (int i = by.Length - 1;i >= 0;i--){str += ((char)by).ToString();}return str;}#endregion#region 一个简单的加密解密方法,在上一个的基础上支持中文 public static string EnCryptCnStr(string str){string htext = ""; // blank textfor (int i = 0; i < str.Length; i++){htext = htext + (char)(str + 10 - 1 * 2);}return htext;}public static string DeCryptCnStr(string str) {string dtext = "";for (int i = 0; i < str.Length; i++){dtext = dtext + (char)(str - 10 + 1 * 2);}return dtext;}#endregion#region Url地址编码解码/// <summary>/// 编码Url地址/// </summary>/// <param name="url"></param>/// <returns></returns>public static string UrlEncode(string url){byte[] mByte = null;mByte = System.Text.Encoding.GetEncoding("GB2312").GetBytes(url);return System.Web.HttpUtility.UrlEncode(mByte);}/// <summary>/// 解码Url地址/// </summary>/// <param name="url"></param>/// <returns></returns>public static string UrlDecode(string url){return HttpUtility.UrlDecode(url, System.Text.Encoding.GetEncoding("GB2312"));}#endregion.。
字符串加密解密函数
字符串加密解密函数Base64加密#region Base64加密[WebMethod]public string Base64Encrypt(string pToEncrypt){return Convert.ToBase64String(System.Text.Encoding.Default.GetBytes(pToEncrypt));}#endregionBase64编码#region Base64编码[WebMethod]public string Base64Decrypt(string pToDeCrypt){return System.Text.Encoding.Default.GetString(Convert.FromBase64String(pToDeCrypt)); }#endregionMD5加密#region MD5加密[WebMethod]public string Encrypt_MD5_Standard(string strpwd){MD5 MD5=new MD5CryptoServiceProvider();byte[] datSource = System.Text.Encoding.Default.GetBytes(strpwd);byte[] newSource = puteHash(datSource);string byte2String = null;for (int i=0; i<newSource.Length; i++){string thisByte=newSource[i].ToString("x");if(thisByte.Length==1) thisByte="0"+thisByte;byte2String += thisByte;}return byte2String;}#endregionPassport 加密函数#region Passport 加密函数[WebMethod]public string Passport_Encrypt(string txt, string key){// 使⽤随机数发⽣器产⽣ 0~32000 的值并 MD5()string encrypt_key = Encrypt_MD5_Standard(GetRandomNumber(0, 32000).ToString()); // 变量初始化int ctr = 0;string tmp = "";// for 循环,$i 为从 0 开始,到⼩于 $txt 字串长度的整数for (int i = 0; i < txt.Length; i++){// 如果 $ctr = $encrypt_key 的长度,则 $ctr 清零ctr = ctr == encrypt_key.Length ? 0 : ctr;// $tmp 字串在末尾增加⼀位,其内容为 $txt 的第 $i 位,// 与 $encrypt_key 的第 $ctr + 1 位取异或。
C#里的一些加密解密标准函数示例——DES,SHA1,RSA
C#⾥的⼀些加密解密标准函数⽰例——DES,SHA1,RSA最近收到了很多朋友的来信说希望提供DES的C#代码,但是我个⼈认为,.NET 提供了很多标准函数,没有必要⾃⼰写,所以我也只发布了C++的代码,如果⼤家⼀定要熟悉加密过程的话,也可以⾃⼰动⼿实现整个过程,这个可以参考我博客⾥的DES 算法介绍,和yxyDES2 Class的代码,代码注释相当的清楚。
.NET 提供了很多标准加密、解密函数,我简要介绍⼀下DES,SHA1,RSA的标准函数的使⽤。
如果你想做⼀个⽹络安全模块,只需将三种算法结合起来设计⼀个模型,我相信可以实现很多复杂的功能。
⽰例本⾝并不复杂,我也不做过多解释,我也学Linus Torvalds⼀样吼⼀句:"Read the f**ing code”,哈哈,开个玩笑,我相信⼤家肯定能看懂。
注:以下⽰例需引⽤命名空间: using System.Security.Cryptography;⼀. DES 加密、解密 我相信⼀下注释相当清楚了,加上我博客⾥关于DES的⽂章确实不少,所以DES不做任何解释,怎么调⽤就更不⽤解释了吧,呵呵://默认密钥向量private byte[] Keys = { 0xEF, 0xAB, 0x56, 0x78, 0x90, 0x34, 0xCD, 0x12 };///<summary>/// DES加密字符串///</summary>///<param name="encryptString">待加密的字符串</param>///<param name="encryptKey">加密密钥,要求为8位</param>///<returns>加密成功返回加密后的字符串,失败返回源串</returns>public string EncryptDES(string encryptString, string encryptKey){try{byte[] rgbKey = Encoding.UTF8.GetBytes(encryptKey.Substring(0, 8));byte[] rgbIV = Keys;byte[] inputByteArray = Encoding.UTF8.GetBytes(encryptString);DESCryptoServiceProvider dCSP = new DESCryptoServiceProvider();MemoryStream mStream = new MemoryStream();CryptoStream cStream = new CryptoStream(mStream, dCSP.CreateEncryptor(rgbKey, rgbIV), CryptoStreamMode.Write);cStream.Write(inputByteArray, 0, inputByteArray.Length);cStream.FlushFinalBlock();return Convert.ToBase64String(mStream.ToArray());}catch{return encryptString;}}///<summary>/// DES解密字符串///</summary>///<param name="decryptString">待解密的字符串</param>///<param name="decryptKey">解密密钥,要求为8位,和加密密钥相同</param>///<returns>解密成功返回解密后的字符串,失败返源串</returns>public string DecryptDES(string decryptString, string decryptKey){try{byte[] rgbKey = Encoding.UTF8.GetBytes(decryptKey.Substring(0, 8));byte[] rgbIV = Keys;byte[] inputByteArray = Convert.FromBase64String(decryptString);DESCryptoServiceProvider DCSP = new DESCryptoServiceProvider();MemoryStream mStream = new MemoryStream();CryptoStream cStream = new CryptoStream(mStream, DCSP.CreateDecryptor(rgbKey, rgbIV), CryptoStreamMode.Write);cStream.Write(inputByteArray, 0, inputByteArray.Length);cStream.FlushFinalBlock();return Encoding.UTF8.GetString(mStream.ToArray());}catch{return decryptString;}}⼆. SHA1 加密(HASH算法没有解密) 安全哈希算法(Secure Hash Algorithm)主要适⽤于数字签名标准(Digital Signature Standard DSS)⾥⾯定义的数字签名算法(Digital Signature Algorithm DSA)。
MD5实现加密解密
MD5实现加密解密MD5(Message Digest Algorithm 5),中文名为消息摘要算法5,是一种常用的哈希函数。
它接收输入消息并返回一个固定长度的哈希值,通常是128位(16字节)。
MD5算法的实现过程比较简单,可以分为四个步骤:填充,添加长度,初始化参数,以及循环处理。
下面将具体介绍每个步骤的实现过程。
首先,填充。
MD5以512位(64字节)为块进行处理,如果输入消息的长度不足512位,就需要进行填充。
填充的规则是在消息的末尾加上一个1,然后再加上若干个0,直到消息的长度(包含填充位)等于448位(即消息长度模512等于448)。
填充位的长度加上消息长度再加上64位长度的原始消息长度(以二进制形式表示)即为消息的总长度。
添加长度。
在填充之后,还需要再加上64位的原始消息长度。
这个长度被分成两个32位的部分,分别加在填充后的消息的最后64位中,低位字节在前,高位字节在后。
初始化参数。
MD5算法使用一些固定的参数进行计算,这些参数被称为初始链接值。
初始链接值是一个包含四个32位整数的数组,并被赋予一些特定的常数。
循环处理。
MD5算法通过四轮迭代和一系列的位运算对每个块进行处理。
每轮迭代使用一个4x4的矩阵实现算法。
在每一轮迭代中,通过选择函数、逻辑函数和位移操作将输入块与初始链接值相关联,然后输出一个新的链接值,并将其与下一个输入块相关联。
经过四轮迭代后,最后一个块的计算结果就是MD5哈希值。
在MD5实现的过程中,一般会通过不断地调用填充、添加长度、初始化参数和循环处理这四个步骤,对连续的消息块进行处理。
最终的处理结果即为输入消息的MD5哈希值。
MD5算法在信息安全领域有着广泛的应用。
它可以用于数据完整性校验、密码的验证、文件的一致性校验等方面。
但是需要注意的是,由于MD5算法存在一定的弱点,如碰撞攻击,因此在一些对安全性要求较高的场景中,应该使用更安全的哈希函数,如SHA-256在进行MD5加密解密的实现时,可以使用现有的MD5算法库,将需要加密或解密的数据传入函数进行处理。
基于哈希函数的数据加密和解密技术研究
基于哈希函数的数据加密和解密技术研究随着信息化时代的进步,数据的安全性变得越来越重要,很多机构、企业和个人都需要对自己的数据进行加密和解密操作。
哈希函数是一种常见的数据加密和解密技术,本文将通过探讨哈希函数的基本概念、应用场景以及优缺点等方面,来研究基于哈希函数的数据加密和解密技术。
一、哈希函数的基本概念哈希函数又称为散列函数,是一种将任意长度的数据映射为固定长度的散列值的函数。
哈希函数常常用于数据加密和解密操作,它能够为数据生成唯一的散列值,且不同输入数据的散列值应当具有唯一性。
哈希函数的基本概念包括如下几个方面:1. 映射性:哈希函数将输入数据映射为固定长度的散列值,且不同的输入数据应当具有唯一的散列值。
2. 压缩性:哈希函数生成的散列值应当比输入数据的长度小得多,通常散列值的长度都是固定的。
3. 雪崩效应:哈希函数的输入数据只要有微小的改动,就会导致生成的散列值发生巨大的变化。
4. 不可逆性:哈希函数是一种单向函数,即可以通过输入数据生成散列值,但不能通过散列值还原出原始的输入数据,从而保证了数据的安全性。
二、哈希函数的应用场景1. 密码加密:哈希函数可以将用户的密码映射为散列值,存储时只保存散列值,不保存密码明文,从而保护了用户的密码安全性。
2. 数据完整性校验:哈希函数可以将数据生成散列值,如果接收方收到的数据的散列值与发送方生成的散列值不同,说明发送的数据已经被修改,从而保证数据的完整性。
3. 数字签名:哈希函数可以对数据进行数字签名,将数据生成唯一的散列值,并用私钥对散列值进行签名,从而保护数据的真实性和完整性。
三、哈希函数的优缺点哈希函数作为一种数据加密和解密技术,虽然可以保护数据的安全性和完整性,但它也存在一些优缺点。
1. 优点:(1) 散列值具有唯一性和不可预测性,保证数据的安全性。
(2) 散列值长度固定,不受原始数据长度的影响,简化了数据加密和解密操作。
(3) 散列值的计算速度快,适用于大量数据的加密和解密操作。
VBA中常见的文件加密与解密方法与实例
VBA中常见的文件加密与解密方法与实例文件加密和解密是信息安全领域中必不可少的一部分。
VBA(Visual Basic for Applications)是一种编程语言,常用于Microsoft Office软件中,如Excel、Word等。
VBA 提供了许多可用于文件加密和解密的方法和函数,以帮助保护敏感信息和数据。
本文将介绍VBA中常见的文件加密和解密方法,并提供相应的实例。
一、VBA中的加密方法1. 使用密码保护文件Excel和Word都提供了密码保护文件的选项。
你可以设置访问密码,使得未输入正确密码的情况下无法打开或编辑文件。
下面是一个加密Excel文件的示例:```vbaSub PasswordProtectWorkbook()Dim strPassword As StringstrPassword = InputBox("请输入密码:")ThisWorkbook.Password = strPasswordEnd Sub```2. 使用加密算法加密文件内容VBA提供了多种加密算法,如DES、AES等。
你可以使用这些算法对文件内容进行加密。
下面是一个使用DES算法进行加密的示例:```vbaSub EncryptFileContent()Dim strInputFile As String, strOutputFile As StringDim objFSO As FileSystemObjectDim objInputFile As TextStream, objOutputFile As TextStreamDim strFileContent As String, strEncryptedContent As StringDim objDes As New CryptoAPI' 读取原文件内容strInputFile = "原文件路径"Set objFSO = New FileSystemObjectSet objInputFile = objFSO.OpenTextFile(strInputFile) strFileContent = objInputFile.ReadAllobjInputFile.Close' 加密文件内容objDes.Key = "加密密钥"objDes.Message = strFileContentstrEncryptedContent = objDes.Encrypt' 写入加密后的内容到新文件strOutputFile = "加密后的文件路径"Set objOutputFile =objFSO.CreateTextFile(strOutputFile)objOutputFile.Write strEncryptedContentobjOutputFile.CloseEnd Sub```二、VBA中的解密方法1. 使用密码解密文件如果一个文件通过密码保护进行了加密,那么你需要输入正确的密码才能打开和编辑文件。
oraclemd5解密函数
oraclemd5解密函数
Oracle是一种常用的关系型数据库管理系统,其中包含了许多常用的加密和解密函数。
其中,MD5解密函数是一种常用的密码解密函数,经常用于解密存储在数据库中的MD5加密密码。
Oracle中的MD5解密函数通常包含两个参数,第一个参数是要解密的字符串,第二个参数是密码解密的密钥。
使用MD5解密函数时,需要提供正确的密钥才能成功解密。
使用Oracle的MD5解密函数时,需要注意以下几点:
1. 确保提供正确的解密密钥。
如果密钥不正确,解密可能会失败。
2. 确保要解密的字符串是经过MD5加密的。
如果字符串没有经过MD5加密,解密也会失败。
3. 针对大量加密数据的解密,可能需要使用批量处理方法,以提高解密效率。
总之,Oracle的MD5解密函数是一种方便、快捷的解密方法,可以帮助用户快速解密MD5加密的密码和数据。
- 1 -。
aes_decrypt用法
aes_decrypt用法AES(Advanced Encryption Standard)是一种对称加密算法,它可以用于加密和解密数据。
在加密过程中,AES算法使用一个密钥来加密数据,而在解密过程中,同样的密钥被用来解密数据。
在本文中,我们将重点介绍AES算法的解密函数aes_decrypt的用法。
aes_decrypt函数是一个解密函数,它可以用来解密使用AES算法加密的数据。
该函数的语法如下:```aes_decrypt(ciphertext, key, iv, padding)```其中,ciphertext是要解密的密文,key是用于加密和解密的密钥,iv是初始化向量,padding是填充模式。
下面我们将详细介绍这些参数的含义和用法。
1. ciphertextciphertext是要解密的密文。
在使用aes_decrypt函数时,我们需要将密文作为参数传递给该函数。
密文可以是任何长度的二进制数据,但必须与加密时使用的密钥和初始化向量相对应。
2. keykey是用于加密和解密的密钥。
在使用aes_decrypt函数时,我们需要将密钥作为参数传递给该函数。
密钥必须是一个长度为16、24或32字节的二进制数据。
在解密过程中,必须使用与加密时相同的密钥。
3. iviv是初始化向量。
在使用aes_decrypt函数时,我们需要将初始化向量作为参数传递给该函数。
初始化向量必须是一个长度为16字节的二进制数据。
在解密过程中,必须使用与加密时相同的初始化向量。
4. paddingpadding是填充模式。
在使用aes_decrypt函数时,我们需要指定填充模式。
填充模式可以是PKCS5Padding、PKCS7Padding、ZeroPadding或NoPadding。
如果加密时使用了填充模式,则在解密时必须使用相同的填充模式。
下面是一个使用aes_decrypt函数解密AES加密数据的示例:```import javax.crypto.Cipher;import javax.crypto.spec.IvParameterSpec;import javax.crypto.spec.SecretKeySpec;public class AESDecryptExample {public static void main(String[] args) throws Exception {String ciphertext = "2b7e151628aed2a6abf7158809cf4f3c"; String key = "000102030405060708090a0b0c0d0e0f";String iv = "00000000000000000000000000000000";String padding = "NoPadding";byte[] ciphertextBytes = hexStringToByteArray(ciphertext);byte[] keyBytes = hexStringToByteArray(key);byte[] ivBytes = hexStringToByteArray(iv);Cipher cipher = Cipher.getInstance("AES/CBC/" + padding);SecretKeySpec keySpec = new SecretKeySpec(keyBytes, "AES"); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);byte[] plaintextBytes = cipher.doFinal(ciphertextBytes);String plaintext = new String(plaintextBytes, "UTF-8");System.out.println("Plaintext: " + plaintext);}public static byte[] hexStringToByteArray(String s) {int len = s.length();byte[] data = new byte[len / 2];for (int i = 0; i < len; i += 2) {data[i / 2] = (byte) ((Character.digit(s.charAt(i), 16) << 4)+ Character.digit(s.charAt(i+1), 16));}return data;}}```在上面的示例中,我们使用了AES算法的解密函数aes_decrypt来解密一个使用AES算法加密的数据。
Oracle加密和解密函数
CREATE OR REPLACE function ds_func_decrypt_des(p_text varchar2, p_key varchar2) return varchar2 is p_text_raw RAW(20000); p_key_raw RAW(20000); v_text_raw RAW(20000); v_text varchar2(4000); v_ErrorText varchar2(500); begin if(p_text is null or p_text = '' ) then return ''; end if; p_text_raw := HEXTORAW(p_text); p_key_raw := UTL_I18N.STRING_TO_RAW(p_key, 'ZHS16GBK'); dbms_obfuscation_toolkit.DESDECRYPT(input => p_text_raw, key =>p_key_raw, decrypted_data=> v_text_raw); v_text := UTL_I18N.RAW_TO_CHAR(v_text_raw, 'ZHS16GBK'); dbms_output.put_line(v_text); return rtrim(v_text,chr(0)); exception when others then v_ErrorText := 'dserror:'||SUBSTR(SQLERRM, 1, 200); return v_ErrorText; end;
时一般要求都是要进行加密保存的下面是一组oracle加密和解密函数
Python之数据加密与解密及相关操作(hashlib、hmac、random、base6。。。
Python之数据加密与解密及相关操作(hashlib、hmac、random、base6。
本⽂内容1. 数据加密概述2. Python中实现数据加密的模块简介3. hashlib与hmac模块介绍4. random与secrets模块介绍5. base64模块介绍6. pycrypto模块介绍7. 总结8. 参考⽂档提⽰: Python 2.7中的str是字节串,⽽Python 3.x中的str是字符串。
本⽂中的代码都是通过Python 2.7实现的,如果你使⽤的是Python 3.x,由于下⾯⼤部分加密与解密函数的参数都要求是字节对象,因此在调⽤下⾯介绍的加解密函数时,可能需要先将字符串参数转换为字节对象。
⼀、数据加密概述1. ⽹络数据传输⾯临的威胁⽹络安全涉及很多⽅⾯,⽽⽹络数据的安全传输通常会⾯临以下⼏⽅⾯的威胁:数据窃听与机密性:即怎样保证数据不会因为被截获或窃听⽽暴露。
数据篡改与完整性:即怎样保证数据不会被恶意篡改。
⾝份冒充与⾝份验证:即怎样保证数据交互双⽅的⾝份没有被冒充。
2. 相应的解决⽅案针对以上⼏个问题,可以⽤以下⼏种数据加密⽅式来解决(每种数据加密⽅式⼜有多种不同的算法实现):数据加密⽅式描述主要解决的问题常⽤算法对称加密指数据加密和解密使⽤相同的密钥数据的机密性DES, AES⾮对称加密也叫公钥加密,指数据加密和解密使⽤不同的密钥--密钥对⼉⾝份验证DSA,RSA单向加密指只能加密数据,⽽不能解密数据数据的完整性MD5,SHA系列算法需要说明的是,上⾯SHA系列算法是根据⽣成的密⽂的长度⽽命名的各种算法名称,如SHA1(160bits)、SHA224、SHA256、SHA384等。
我们常听说的MD5算法⽣成的密⽂长度为128bits。
关于上⾯提到的这些内容,⼤家可以参考这篇博⽂来了解更多的信息。
本⽂主要讨论的问题是,我们如何使⽤Python来实现这些数据加密⽅式。
⼆、Python中实现数据加密的模块简介Python中的⼤部分功能都是通过模块提供的,因此我们主要是通过Python中提供的⼀些内置的模块或外部模块来实现上⾯提到的各种加密算法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
本帖最后由小平于2013-6-22 10:05 编辑#region DES加密解密/// <summary>/// DES加密/// </summary>/// <param name="strSource">待加密字串</param>/// <param name="key">32位Key值</param>/// <returns>加密后的字符串</returns>public string DESEncrypt(string strSource){return DESEncrypt(strSource, DESKey);}public string DESEncrypt(string strSource, byte[] key){SymmetricAlgorithm sa = Rijndael.Create();sa.Key = key;sa.Mode = CipherMode.ECB;sa.Padding = PaddingMode.Zeros;MemoryStream ms = new MemoryStream();CryptoStream cs = new CryptoStream(ms, sa.CreateEncryptor(), CryptoStreamMode.Write);byte[] byt = Encoding.Unicode.GetBytes(strSource);cs.Write(byt, 0, byt.Length);cs.FlushFinalBlock();cs.Close();return Convert.ToBase64String(ms.ToArray());}/// <summary>/// DES解密/// </summary>/// <param name="strSource">待解密的字串</param> /// <param name="key">32位Key值</param>/// <returns>解密后的字符串</returns>public string DESDecrypt(string strSource){return DESDecrypt(strSource, DESKey);}public string DESDecrypt(string strSource, byte[] key) {SymmetricAlgorithm sa = Rijndael.Create();sa.Key = key;sa.Mode = CipherMode.ECB;sa.Padding = PaddingMode.Zeros;ICryptoTransform ct = sa.CreateDecryptor();byte[] byt = Convert.FromBase64String(strSource);MemoryStream ms = new MemoryStream(byt);CryptoStream cs = new CryptoStream(ms, ct, CryptoStreamMode.Read);StreamReader sr = new StreamReader(cs, Encoding.Unicode);return sr.ReadToEnd();}#endregion#region 一个用hash实现的加密解密方法/// <summary>/// 加密/// </summary>/// <param name="src"></param>/// <returns></returns>public static string EncryptStrByHash(string src){if (src.Length == 0){return "";}byte[] HaKey = System.Text.Encoding.ASCII.GetBytes((src + "Test").ToCharArray());byte[] HaData = new byte[20];HMACSHA1 Hmac = new HMACSHA1(HaKey);CryptoStream cs = new CryptoStream(Stream.Null, Hmac, CryptoStreamMode.Write);try{cs.Write(HaData, 0, HaData.Length);}finally{cs.Close();}string HaResult = System.Convert.ToBase64String(Hmac.Hash).Substring(0, 16);byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(HaResult.ToCharArray());byte[] RiDataBuf = System.Text.Encoding.ASCII.GetBytes(src.ToCharArray());byte[] EncodedBytes = { };MemoryStream ms = new MemoryStream();RijndaelManaged rv = new RijndaelManaged();cs = new CryptoStream(ms, rv.CreateEncryptor(RiKey, RiKey),CryptoStreamMode.Write);try{cs.Write(RiDataBuf, 0, RiDataBuf.Length);cs.FlushFinalBlock();EncodedBytes = ms.ToArray();}finally{ms.Close();cs.Close();}return HaResult + System.Convert.ToBase64String(EncodedBytes);}/// <summary>/// 解密/// </summary>/// <param name="src"></param>/// <returns></returns>public static string DecrypStrByHash(string src){if (src.Length < 40) return "";byte[] SrcBytes = System.Convert.FromBase64String(src.Substring(16));byte[] RiKey = System.Text.Encoding.ASCII.GetBytes(src.Substring(0, 16).ToCharArray());byte[] InitialText = new byte[SrcBytes.Length];RijndaelManaged rv = new RijndaelManaged();MemoryStream ms = new MemoryStream(SrcBytes);CryptoStream cs = new CryptoStream(ms, rv.CreateDecryptor(RiKey, RiKey), CryptoStreamMode.Read);try{cs.Read(InitialText, 0, InitialText.Length);}finally{ms.Close();cs.Close();}System.Text.StringBuilder Result = new System.Text.StringBuilder();for (int i = 0; i < InitialText.Length; ++i) if (InitialText > 0) Result.Append((char)InitialText);return Result.ToString();}/// <summary>/// 对加密后的密文重新编码,如果密文长>16,则去掉前16个字符,如果长度小于16,返回空字符串/// </summary>/// <param name="s"></param>/// <returns></returns>public string ReEncryptStrByHash(string s){string e = Encrypt.EncryptStrByHash(s);return ((e.Length > 16) ? e.Substring(16) : "");}#endregion#region Md5加密,生成16位或32位,生成的密文都是大写public static string Md5To16(string str){MD5CryptoServiceProvider md5 = new MD5CryptoServiceProvider();string t2 = BitConverter.ToString(puteHash(UTF8Encoding.Default.GetBytes(str)), 4, 8);t2 = t2.Replace("-", "");return t2;}//// <summary>/// MD5 32位加密/// </summary>/// <param name="str"></param>/// <returns></returns>public static string Md5To32(string str){string pwd = "";MD5 md5 = MD5.Create();byte[] s = puteHash(Encoding.UTF8.GetBytes(str));for (int i = 0; i < s.Length; i++){pwd = pwd + s.ToString("X");}return pwd;}#endregion#region 3DES加密解密public string Encrypt3DES(string str){//密钥string sKey = "wyw308";// //矢量,可为空string sIV = "scf521";// //构造对称算法SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();ICryptoTransform ct;MemoryStream ms;CryptoStream cs;byte[] byt;mCSP.Key = Convert.FromBase64String(sKey);mCSP.IV = Convert.FromBase64String(sIV);mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);byt = Encoding.UTF8.GetBytes(str);ms = new MemoryStream();cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);cs.Write(byt, 0, byt.Length);cs.FlushFinalBlock();cs.Close();return Convert.ToBase64String(ms.ToArray());}/// <summary>/// 带指定密钥和矢量的3DES加密/// </summary>/// <param name="str"></param>/// <param name="sKey"></param>/// <param name="sIV"></param>/// <returns></returns>public string Encrypt3DES(string str, string sKey, string sIV){SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();ICryptoTransform ct;MemoryStream ms;CryptoStream cs;byte[] byt;mCSP.Key = Convert.FromBase64String(sKey);mCSP.IV = Convert.FromBase64String(sIV);mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;ct = mCSP.CreateEncryptor(mCSP.Key, mCSP.IV);byt = Encoding.UTF8.GetBytes(str);ms = new MemoryStream();cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);cs.Write(byt, 0, byt.Length);cs.FlushFinalBlock();cs.Close();return Convert.ToBase64String(ms.ToArray());}//解密public string Decrypt3DES(string Value){string sKey = "wyw308";string sIV = "scf521";SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();ICryptoTransform ct;MemoryStream ms;CryptoStream cs;byte[] byt;mCSP.Key = Convert.FromBase64String(sKey);mCSP.IV = Convert.FromBase64String(sIV);mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);byt = Convert.FromBase64String(Value);ms = new MemoryStream();cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);cs.Write(byt, 0, byt.Length);cs.FlushFinalBlock();cs.Close();return Encoding.UTF8.GetString(ms.ToArray());}/// <summary>/// 带指定密钥和矢量的3DES解密/// </summary>/// <param name="Value"></param>/// <param name="sKey"></param>/// <param name="sIV"></param>/// <returns></returns>public string Decrypt3DES(string str, string sKey, string sIV){SymmetricAlgorithm mCSP = new TripleDESCryptoServiceProvider();ICryptoTransform ct;MemoryStream ms;CryptoStream cs;byte[] byt;mCSP.Key = Convert.FromBase64String(sKey);mCSP.IV = Convert.FromBase64String(sIV);mCSP.Mode = System.Security.Cryptography.CipherMode.ECB;mCSP.Padding = System.Security.Cryptography.PaddingMode.PKCS7;ct = mCSP.CreateDecryptor(mCSP.Key, mCSP.IV);byt = Convert.FromBase64String(str);ms = new MemoryStream();cs = new CryptoStream(ms, ct, CryptoStreamMode.Write);cs.Write(byt, 0, byt.Length);cs.FlushFinalBlock();cs.Close();return Encoding.UTF8.GetString(ms.ToArray());}#endregion#region 一个简单的加密解密方法,只支持英文public static string EnCryptEnStr(string str) //倒序加1加密{byte[] by = new byte[str.Length];for (int i = 0;i <= str.Length - 1;i++){by = (byte)((byte)str + 1);}str = "";for (int i = by.Length - 1;i >= 0;i--){str += ((char)by).ToString();}return str;}public static string DeCryptEnStr(string str) //顺序减1解码 {byte[] by = new byte[str.Length];for (int i = 0;i <= str.Length - 1;i++)by = (byte)((byte)str - 1);}str = "";for (int i = by.Length - 1;i >= 0;i--){str += ((char)by).ToString();}return str;}#endregion#region 一个简单的加密解密方法,在上一个的基础上支持中文 public static string EnCryptCnStr(string str){string htext = ""; // blank textfor (int i = 0; i < str.Length; i++){htext = htext + (char)(str + 10 - 1 * 2);return htext;}public static string DeCryptCnStr(string str) {string dtext = "";for (int i = 0; i < str.Length; i++){dtext = dtext + (char)(str - 10 + 1 * 2);}return dtext;}#endregion#region Url地址编码解码/// <summary>/// 编码Url地址/// </summary>/// <param name="url"></param>/// <returns></returns>public static string UrlEncode(string url){byte[] mByte = null;mByte = System.Text.Encoding.GetEncoding("GB2312").GetBytes(url);return System.Web.HttpUtility.UrlEncode(mByte);}/// <summary>/// 解码Url地址/// </summary>/// <param name="url"></param>/// <returns></returns>public static string UrlDecode(string url){return HttpUtility.UrlDecode(url, System.Text.Encoding.GetEncoding("GB2312"));}#endregion。