Phpc语言3des
直接拿
包com . nnff . des;
导入Java . security . security;
导入javax . crypto . cipher;
导入javax . crypto . secret key;
导入javax . crypto . spec . secretkeyspec;
/*字符串解密(3DES)加密
* ECB模式/用PKCS7补脚,目前给密钥192位。
* 3DES(即三重DES)DES到AES的穿越加密计算(NIST 3-DES在1999年指定穿越
*加密标准)DES安全性更高,不变形。DES基本模块由组合组设计和组装。
*秘密计算的具体实现:设Ek()Dk()代表DES,加解密过程K代表DES。
*密钥p代表明文,c代表密表。
* 3DES加密过程:C=Ek3(Dk2(Ek1(P)))
* 3DES解密过程:P=Dk1((EK2(Dk3(C)))
* */
公共三级
/**
* @param argsjava调用sun公司提供3DES加密解密,需要制作。
*带有$JAVA _ HOME/JRE/lib/directory 4 jar包:
*jce.jar
*security/US_export_policy.jar
*安全性/local_policy.jar
*ext/sunjce_provider.jar
*/
私有静态最终字符串算法= " DESede//定义加密计算,用DES,DES,DESede,Blowfish。
//keybyte加密密钥为24字节。
//src加密数据缓冲区(源)
如何在公共静态字节中用c实现3DES算法.. //功能:实现DES和3DES加解密算法。
#包含stdio.h
#包含stdlib.h
#包含字符串. h
#包含“des.h”
//函数声明
int Do_DES(char* strSrc,char* strKey,char* strDest,char flag);
int Do_3DES(char* strSrc,char* strKey,char* strDest,char flag);
//主函数
int main(int argc,char** argv)
{
char src16[16 1],key16[16 1],key48[48 1],dest 16[16 1];
如果(argc!= 3)
{
fprintf(stderr,"用法:[%s -e|-d s|3]\n ",argv[0]);
出口(1);
}
if(strcmp(argv[2],-s))= = 0)
{
if(strcmp(argv[1],-e))= = 0)
{
fprintf(stderr,"请输入要加密的字符串(16进制数):\ n ");
memset(src16,0,sizeof(src 16));
scanf("%s ",src 16);
fprintf(stderr,"请输入密钥字符串(16进制数):\ n ");
memset(key16,0,sizeof(key 16));
scanf("%s ",key 16);
memset(dest16,0,sizeof(dest 16));
Do_DES(src16,key16,dest16,' e ');
fprintf(stderr," Result: [%s]\n ",dest 16);
}
else if(strcmp(argv[1],"-d") == 0)
{
fprintf(stderr,"请输入要解密的字符串(16进制数):\ n ");
memset(src16,0,sizeof(src 16));
scanf("%s ",src 16);
fprintf(stderr,"请输入密钥字符串(16进制数):\ n ");
memset(key16,0,sizeof(key 16));
scanf("%s ",key 16);
memset(dest16,0,sizeof(dest 16));
Do_DES(src16,key16,dest16,' d ');
fprintf(stderr," Result: [%s]\n ",dest 16);
}
其他
return-1;
}
else if(strcmp(argv[2],-3))= = 0
{
if(strcmp(argv[1],-e))= = 0)
{
fprintf(stderr,"请输入要加密的字符串(16进制数):\ n ");
memset(src16,0,sizeof(src 16));
scanf("%s ",src 16);
fprintf(stderr,"请输入密钥字符串(16进制数):\ n ");
memset(key48,0,sizeof(key 48));
scanf("%s ",key 48);
memset(dest16,0,sizeof(dest 16));
Do_3DES(src16,key48,dest16,' e ');
fprintf(stderr," Result: [%s]\n ",dest 16);
}
else if(strcmp(argv[1],"-d") == 0)
{
fprintf(stderr,"请输入要解密的字符串(16进制数):\ n ");
memset(src16,0,sizeof(src 16));
scanf("%s ",src 16);
fprintf(stderr,"请输入密钥字符串(16进制数):\ n ");
memset(key48,0,sizeof(key 48));
scanf("%s ",key 48);
memset(dest16,0,sizeof(dest 16));
Do_3DES(src16,key48,dest16,' d ');
fprintf(stderr," Result: [%s]\n ",dest 16);
}
其他
return-1;
}
其他
return-1;
返回0;
}
//做DES加密或解密。
int Do_DES(char* strSrc,char* strKey,char* strDest,char flag)
{
int i,j;
未签名的char子密钥[16][48 1],字节8[8 1],位[64 1],strTmp[64 1];
无符号字符L0[32 1],R0[32 1],Lx[32 1],Rx[32 1];
如果(!(flag = = ' E ' | | flag = = ' E ' | | flag = = ' D ' | | flag = = ' D '))
return-1;
if(strSrc == NULL || strKey == NULL)
return-2;
if(flag == 'e' || flag == 'E ')
{
memset(字节8,0,sizeof(字节8));
BCDToByte(strKey,16,byte 8);
memset(bits,0,sizeof(位));
ByteToBit(字节8,8,位);
Des_GenSubKey(bits,subKey);
BCD tobyte(str RC,16,byte 8);
ByteToBit(字节8,8,位);
Des_IP(bits,strTmp);
memcpy(L0,strTmp,32);
memcpy(R0,strTmp 32,32);
for(I = 0;i16我)
{
memcpy(Lx,R0,32);
Des_F(R0,子密钥[i],Rx);
Do_XOR(L0,32,Rx);
memcpy(L0,Lx,32);
memcpy(R0,Rx,32);
}
memcpy(位,R0,32);
memcpy(位32,L0,32);
Des_IP_1(位,strTmp);
BitToByte(strTmp,64,byte 8);
ByteToBCD(byte8,8,strDest);
}
其他
{
memset(字节8,0,sizeof(字节8));
BCDToByte(strKey,16,byte 8);
memset(bits,0,sizeof(位));
ByteToBit(字节8,8,位);
Des_GenSubKey(bits,subKey);
BCD tobyte(str RC,16,byte 8);
ByteToBit(字节8,8,位);
Des_IP(bits,strTmp);
memcpy(L0,strTmp,32);
memcpy(R0,strTmp 32,32);
for(I = 0;i16我)
{
memcpy(Lx,R0,32);
Des_F(R0,子密钥[15-i],Rx);
Do_XOR(L0,32,Rx);
memcpy(L0,Lx,32);
memcpy(R0,Rx,32);
}
memcpy(位,R0,32);
memcpy(位32,L0,32);
Des_IP_1(位,strTmp);
BitToByte(strTmp,64,byte 8);
ByteToBCD(byte8,8,strDest);
}
返回0;
}
//做3DES加密或解密。
int Do_3DES(char* strSrc,char* strKey,char* strDest,char flag)
{
无符号字符strBCDKey[32 1],strByteKey[16 1];
无符号字符strMidDest1[16 1],strmiddest 2[16 1];
无符号字符strLKey[16 1],strMKey[16 1],str rkey[16 1];
如果(!(flag = = ' E ' | | flag = = ' E ' | | flag = = ' D ' | | flag = = ' D '))
return-1;
if(strSrc == NULL || strKey == NULL)
return-2;
if(strlen(strKey) 32)
return-3;
if(flag == 'e' || flag == 'E ')
{
memset(strBCDKey,0,sizeof(strBCDKey));
memcpy(strBCDKey,strKey,32);
memset(strLKey,0,sizeof(strLKey));
memcpy(strLKey,strBCDKey,16);
memset(strRKey,0,sizeof(str rkey));
memcpy(strRKey,strBCDKey 16,16);
Do_DES(strSrc,strLKey,strMidDest1,' e ');
Do_DES(strMidDest1,strRKey,strMidDest2,' d ');
Do_DES(strMidDest2,strLKey,strMidDest1,' e ');
memcpy(strDest,strMidDest1,16);
}
其他
{
memset(strBCDKey,0,sizeof(strBCDKey));
memcpy(strBCDKey,strKey,32);
memset(strLKey,0,sizeof(strLKey));
memcpy(strLKey,strBCDKey,16);
memset(strRKey,0,sizeof(str rkey));
memcpy(strRKey,strBCDKey 16,16);
Do_DES(strSrc,strLKey,strMidDest1,' d ');
Do_DES(strMidDest1,strRKey,strMidDest2,' e ');
Do_DES(strMidDest2,strLKey,strMidDest1,' d ');
memcpy(strDest,strMidDest1,16);
}
返回0;
}
Php 3des加密问题 3DES应通过DES加密进行解密。
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
$key = "这是一个密钥";
$input = "让我们9点在秘密地点见面。";
$ TD = mcrypt _ module _ open(' triple des ','',' ecb ',' ');
$ iv = MCRYPT _ create _ iv(MCRYPT _ enc _ get _ iv _ size($ TD),MCRYPT _ RAND);
mcrypt_generic_init($td,$key,$ iv);
$ encrypted _ data = mcrypt _ generic($ TD,$ input);
mcrypt _ generic _ deinit($ TD);
mcrypt _ module _ close($ TD);
?
?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
//.h
函数mdecrypt_3des($input,$key){
$ TD = MCRYPT _ module _ open(MCRYPT _ 3 des,'',MCRYPT_MODE_ECB,' ');
$ block size = mcrypt _ enc _ get _ block _ size($ TD);
$ keysize = mcrypt _ enc _ get _ key _ size($ TD);
$ iv _ size = mcrypt _ enc _ get _ iv _ size($ TD);
$iv = mcrypt_create_iv ($iv_size,MCRYPT _ RAND);
$ input _ len = strlen($ input);
$ padsize = $ blocksize-($ input _ len % $ blocksize);
$input。= str_repeat(pack ('C* ',$padsize),$ padsize);
@mcrypt_generic_init($td,$key,$ iv);//密钥最长可达24位?
//返回urlencode(base64 _ encode(mcrypt _ generic($ TD,$ input));//加密
返回rtrim(mdecrypt_generic($td,base64_decode(urldecode($input)))," \ u 0008 ");//解密
}
?
这段代码复制过来,希望能解决你的问题。
如何用php解密3des ?服务器端编程语言(Professional Hypertext Preprocessor的缩写)
类别Crypt3Des {
var $ key
函数Crypt3Des($key){
$ this-key = $ key;
}
函数加密($input){
$ size = MCRYPT _ get _ block _ size(MCRYPT _ 3 des,' ECB ');
$input = $this-pkcs5_pad($input,$ size);
$key = str_pad($this-key,24,' 0 ');
$ TD = MCRYPT _ module _ open(MCRYPT _ 3 des,'',' ecb ',' ');
$ iv = @ MCRYPT _ create _ iv(MCRYPT _ enc _ get _ iv _ size($ TD),MCRYPT _ RAND);
@mcrypt_generic_init($td,$key,$ iv);
$data = mcrypt_generic($td,$ input);
mcrypt _ generic _ deinit($ TD);
mcrypt _ module _ close($ TD);
//$ data = base64 _ encode($ this-paddingpkcs 7($ data));
$ data = base64 _ encode($ data);
返回$ data
}
函数解密(加密){
$ encrypted = base64 _ decode($ encrypted);
$key = str_pad($this-key,24,' 0 ');
$ TD = MCRYPT _ module _ open(MCRYPT _ 3 des,'',' ecb ',' ');
$ iv = @ MCRYPT _ create _ iv(MCRYPT _ enc _ get _ iv _ size($ TD),MCRYPT _ RAND);
$ ks = mcrypt _ enc _ get _ key _ size($ TD);
@mcrypt_generic_init($td,$key,$ iv);
$ decrypted = mdecrypt _ generic($ TD,$ encrypted);
mcrypt _ generic _ deinit($ TD);
mcrypt _ module _ close($ TD);
$ y = $ this-pkcs 5 _ unpad($ decrypted);
返回$ y;
}
函数pkcs5_pad ($text,$blocksize) {
$ pad = $ blocksize-(strlen($ text)% $ blocksize);
返回$text。str_repeat(chr($pad),$ pad);
}
函数pkcs5_unpad($text){
$ pad = ord($ text { strlen($ text)-1 });
if ($pad strlen($text)) {
返回false
}
if (strspn($text,chr($pad),strlen($text) - $pad)!= $pad){
返回false
}
返回substr($text,0,-1 * $ pad);
}
函数paddingpcs 7($ data){
$ block _ size = MCRYPT _ get _ block _ size(MCRYPT _ 3 des,MCRYPT _ MODE _ CBC);
$ padding _ char = $ block _ size-(strlen($ data)% $ block _ size);
$data。= str_repeat(chr($padding_char),$ padding _ char);
返回$ data
}
}
用法:
$ crypt = new crypt 3 des(' key ');
$code = "加密字符串";
echo $ crypt-decrypt($ code);
Echo公布了结果。
Php的3des加密结果和java不一致。 这个我研究过一次。如果你有php段完整的加密源代码,还是有可能达到一致的结果的,否则会很困难,因为虽然都叫3des,但是里面有很多算法,比如php加密时是否使用向量等等。
最后更新于 2023-10-07 13:59:11 并被添加「」标签,已有 位童鞋阅读过。
本站使用「署名 4.0 国际」创作共享协议,可自由转载、引用,但需署名作者且注明文章出处
相关文章