PHP,C++ 通用加解密,需要md5,base64 支持

这篇博客介绍了如何在PHP和C++中实现通用的加解密功能,同时涉及到MD5哈希和Base64编码。作者提醒,C++代码可能使用了C++11的库函数,如遇到编译问题可尝试移除。此外,还提出了对Base64编码美化的一些思考。
摘要由CSDN通过智能技术生成

PHP,C++ 通用加解密,需要md5,base64 支持


时间过太久,代码从哪里下载的往了,不过我自己做过修改,其中C++ 可能包含部分 C++11 的库函数,编译不过的话,移除即可

个人觉得 base64 大家可以想法子把它美化一下


PHP


<?php

//md5  函数使用小写

/**
* 可逆的字符串加密函数
* @param int $txtStream 待加密的字符串内容
* @param int $password 加密密码
* @return string 加密后的字符串
*/
function enCrypt($txtStream,$password){  
	//密锁串,不能出现重复字符,内有A-Z,a-z,0-9,/,=,+,_,  
	  
	$lockstream = 'GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456';  
	//随机找一个数字,并从密锁串中找到一个密锁值  
	$lockLen = strlen($lockstream);  
	$lockCount = rand(0,$lockLen-1);  
	$randomLock = $lockstream[$lockCount];  
	//结合随机密锁值生成MD5后的密码  
	$password = md5($password.$randomLock);  
	//开始对字符串加密  
	$txtStream = base64_encode($txtStream);  
	$tmpStream = '';  
	$i=0;$j=0;$k = 0;  
	for ($i=0; $i<strlen($txtStream); $i++) {  
	$k = ($k == strlen($password)) ? 0 : $k;  
	$j = (strpos($lockstream,$txtStream[$i])+$lockCount+ord($password[$k]))%($lockLen);  
	$tmpStream .= $lockstream[$j];  
	$k++;  
	}  
	return $tmpStream.$randomLock;  
} 

/**
* 可逆的字符串解密函数
* @param int $txtStream 待加密的字符串内容
* @param int $password 解密密码
* @return string 解密后的字符串
*/
function deCrypt($txtStream,$password){  
	//密锁串,不能出现重复字符,内有A-Z,a-z,0-9,/,=,+,_,  
	$lockstream = 'GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456';  
	  
	    
	$lockLen = strlen($lockstream);  
	//获得字符串长度  
	$txtLen = strlen($txtStream);  
	//截取随机密锁值  
	$randomLock = $txtStream[$txtLen - 1];  
	//获得随机密码值的位置  
	$lockCount = strpos($lockstream,$randomLock);  
	//结合随机密锁值生成MD5后的密码  
	$password = md5($password.$randomLock);  
	//开始对字符串解密  
	$txtStream = substr($txtStream,0,$txtLen-1);  
	$tmpStream = '';  
	$i=0;$j=0;$k = 0;  
	for($i=0; $i<strlen($txtStream); $i++){  
	$k = ($k == strlen($password)) ? 0 : $k;  
	$j = strpos($lockstream,$txtStream[$i]) - $lockCount - ord($password[$k]);  
	while($j < 0){  
	$j = $j + ($lockLen);  
	}  
	$tmpStream .= $lockstream[$j];  
	$k++;  
	}  
	return base64_decode($tmpStream);  
}  

echo enCrypt("3","123456789");


?>



C++

//与 PHP 通用加解密
std::string phpEnCode(std::string& word, std::string& pass)
{
	std::string lock_stream = "GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456";
	int lock_len = lock_stream.length();
	srand((unsigned int)time(NULL));
	int lock_num = rand() % lock_len;
	char random = lock_stream[lock_num];
	pass += random;
	pass = MD5(pass).toString();
	word = base64_encode(word);
	std::string res = "";
	int j = 0, k = 0;
	for (int i = 0; i< (int)word.length(); ++i)
	{
		k = (k == pass.length()) ? 0 : k;
		char y = pass[k];
		j = (lock_stream.find(word[i]) + lock_num + (int)y) % lock_len;
		res += lock_stream[j];
		k++;
	}
	res += random;
	return std::move(res);
}

std::string phpDnCode(std::string& word, std::string& pass)
{
	std::string lock_stream = "GHI9+JKLxyz012MNOPYbcRSTUVW8/ABCw3DEZaFXefghijklm7=nopqrsdQtuv456";
	int lock_len = lock_stream.length();
	char random = word[word.length() - 1];
	int lock_num = (int)lock_stream.find(random);
	pass += random;
	pass = MD5(pass).toString();
	std::string res = "";
	int j = 0, k = 0;
	for (int i = 0; i < (int)word.length() - 1; ++i)
	{
		k = (k == pass.length()) ? 0 : k;
		char y = pass[k];
		j = lock_stream.find(word[i]) - (int)y - lock_num;
		while (j < 0) j += lock_len;
		res += lock_stream[j];
		k++;
	}
	res = base64_decode(res);
	/*size_t nnn = res.find('\001');
	if (nnn != std::string::npos) res = res.substr(0, nnn);*/
	return std::move(res);
}




cmd5.h

/*
*兼容网页版 MD5 的 C++  加密
*用法:
*    1.字符串加密:
*    #include <string>
*    string cc = "Login:aa|asdaf";
*    cout << MD5(cc).toString() << endl; 
*    2.文件加密使用函数:  
*    cout << FileDigest("D:\\key.txt") << endl;  
*另附一个最简单的,在原位置逐一异或加解密函数
*    void EnCode(char* source, char* pass)
*/

#ifndef MD5_H  
#define MD5_H  
  
#include <string>  
#include <fstream> 
  
/* Type define */  
typedef unsigned char byte;  
typedef unsigned long ulong;  
  
using std::string;  
using std::ifstream;  
  
/* MD5 declaration. */  
class MD5 {  
public:  
    MD5();  
    MD5(const void *input, size_t length);  
    MD5(const string &str);  
    MD5(ifstream &in);  
    void update(const void *input, size_t length); 
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值