62,046
社区成员
发帖
与我相关
我的任务
分享
#region AES对称加密开始
/// <summary>
/// 获取: AES对称算法密钥 byte 数组
/// </summary>
/// <param name="key">密钥字符串: string</param>
/// <returns>返回对称算法的密钥 byte 数组: byte[]</returns>
private static byte[] AESKey(string key)
{
using (SymmetricAlgorithm symmetricAlgorithm = new RijndaelManaged())
{
symmetricAlgorithm.GenerateKey();
byte[] byteArray = symmetricAlgorithm.Key;
if (key.Length > byteArray.Length)
key = key.Substring(0, byteArray.Length);
else if (key.Length < byteArray.Length)
key = key.PadRight(byteArray.Length, ' ');
return ASCIIEncoding.ASCII.GetBytes(key);
}
}
/// <summary>
/// 获取: AES对称算法初始化向量 byte 数组
/// </summary>
/// <param name="iv">初始化向量字符串: string</param>
/// <returns>返回对称算法初始化向量 byte 数组: byte[]</returns>
private static byte[] AESIV(string iv)
{
using (SymmetricAlgorithm symmetricAlgorithm = new RijndaelManaged())
{
symmetricAlgorithm.GenerateIV();
byte[] byteArray = symmetricAlgorithm.IV;
if (iv.Length > byteArray.Length)
iv = iv.Substring(0, byteArray.Length);
else if (iv.Length < byteArray.Length)
iv = iv.PadRight(byteArray.Length, ' ');
return ASCIIEncoding.ASCII.GetBytes(iv);
}
}
/// <summary>
/// 获取: System.Security.Cryptography.Aes 对称加密字符串
/// </summary>
/// <param name="s">待加密字符串: string</param>
/// <param name="key">密钥字符串: string</param>
/// <param name="iv">初始化向量字符串: string</param>
/// <returns>返回对称加密字符串: string</returns>
public static string AESEncrypt(string s, string key, string iv)
{
byte[] byteArray = UTF8Encoding.UTF8.GetBytes(s);
using (MemoryStream memoryStream = new MemoryStream())
{
Aes aes = new AesCryptoServiceProvider();
CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateEncryptor(AESKey(key), AESIV(iv)), CryptoStreamMode.Write);
aes.Clear();
cryptoStream.Write(byteArray, 0, byteArray.Length);
cryptoStream.Dispose();
return Convert.ToBase64String(memoryStream.ToArray());
}
}
/// <summary>
/// 获取: System.Security.Cryptography.Aes 对称解密字符串
/// </summary>
/// <param name="s">待解密字符串: string</param>
/// <param name="key">密钥字符串: string</param>
/// <param name="iv">初始化向量字符串: string</param>
/// <returns>返回对称解密字符串: string</returns>
public static string AESDecrypt(string s, string key, string iv)
{
byte[] byteArray = Convert.FromBase64String(s);
MemoryStream memoryStream = new MemoryStream(byteArray, 0, byteArray.Length);
Aes aes = new AesCryptoServiceProvider();
CryptoStream cryptoStream = new CryptoStream(memoryStream, aes.CreateDecryptor(AESKey(key), AESIV(iv)), CryptoStreamMode.Read);
return new StreamReader(cryptoStream).ReadToEnd();
}
/// <summary>
/// 获取: 验证字符串与 System.Security.Cryptography.Aes 对称加密字符串比较值,相等返回 true,反之 false
/// </summary>
/// <param name="s">验证字符串: string</param>
/// <param name="aes">System.Security.Cryptography.Aes 对称加密字符串: string</param>
/// <param name="key">密钥字符串: string</param>
/// <param name="iv">初始化向量字符串: string</param>
/// <returns>返回字符串与 System.Security.Cryptography.Aes 对称加密字符串比较值: bool</returns>
public static bool AESVerify(string s, string aes, string key, string iv)
{
string e = AESEncrypt(s, key, iv);
string d = AESDecrypt(aes, key, iv);
StringComparer comparer = StringComparer.Ordinal;
if (0 == comparer.Compare(e, aes) && 0 == comparer.Compare(d, s))
return true;
else
return false;
}
#endregion AES对称加密结束
<?php
function zen_not_null($value) {
if (is_array($value)) {
if (sizeof($value) > 0) {
return true;
} else {
return false;
}
} elseif( is_a( $value, 'queryFactoryResult' ) ) {
if (sizeof($value->result) > 0) {
return true;
} else {
return false;
}
} else {
if (($value != '') && (strtolower($value) != 'null') && (strlen(trim($value)) > 0)) {
return true;
} else {
return false;
}
}
}
function zen_validate_password($plain, $encrypted) {
if (zen_not_null($plain) && zen_not_null($encrypted)) {
$stack = explode(':', $encrypted);
if (sizeof($stack) != 2) return false;
if (md5($stack[1] . $plain) == $stack[0]) {
return true;
}
}
return false;
}
function zen_rand($min = null, $max = null) {
static $seeded;
if (!isset($seeded)) {
mt_srand((double)microtime()*1000000);
$seeded = true;
}
if (isset($min) && isset($max)) {
if ($min >= $max) {
return $min;
} else {
return mt_rand($min, $max);
}
} else {
return mt_rand();
}
}
function zen_encrypt_password($plain) {
$password = '';
for ($i=0; $i<10; $i++) {
$password .= zen_rand();
}
$salt = substr(md5($password), 0, 2);
$password = md5($salt . $plain) . ':' . $salt;
return $password;
}
echo zen_encrypt_password('小五');
echo zen_validate_password('小五', 'd0be8c8321931bf2845ad46bf3979f25:ae')?'成功':'失败';
?>
// 创建Key
public string GenerateKey()
{
DESCryptoServiceProvider desCrypto = (DESCryptoServiceProvider)DESCryptoServiceProvider.Create();
return ASCIIEncoding.ASCII.GetString(desCrypto.Key);
}
// 加密字符串
public string EncryptString(string sInputString, string sKey)
{
byte[] data = Encoding.UTF8.GetBytes(sInputString);
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateEncryptor();
byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
return BitConverter.ToString(result);
}
// 解密字符串
public string DecryptString(string sInputString, string sKey)
{
string[] sInput = sInputString.Split("-".ToCharArray());
byte[] data = new byte[sInput.Length];
for (int i = 0; i < sInput.Length; i++)
{
data[i] = byte.Parse(sInput[i], NumberStyles.HexNumber);
}
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(sKey);
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey);
ICryptoTransform desencrypt = DES.CreateDecryptor();
byte[] result = desencrypt.TransformFinalBlock(data, 0, data.Length);
return Encoding.UTF8.GetString(result);
}