导航:首页 > 编程语言 > php中crypt

php中crypt

发布时间:2024-07-04 03:57:59

‘壹’ java怎么实现php 的crypt

/****************************************************************************
*JCrypt.java
*
*Java-
*
*,[email protected]
*
****************************************************************************/

publicclassJCrypt
{
privateJCrypt(){}

=16;

privatestaticfinalintcon_salt[]=
{
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x00,
0x00,0x00,0x00,0x00,0x00,0x00,0x00,0x01,
0x02,0x03,0x04,0x05,0x06,0x07,0x08,0x09,
0x0A,0x0B,0x05,0x06,0x07,0x08,0x09,0x0A,
0x0B,0x0C,0x0D,0x0E,0x0F,0x10,0x11,0x12,
0x13,0x14,0x15,0x16,0x17,0x18,0x19,0x1A,
0x1B,0x1C,0x1D,0x1E,0x1F,0x20,0x21,0x22,
0x23,0x24,0x25,0x20,0x21,0x22,0x23,0x24,
0x25,0x26,0x27,0x28,0x29,0x2A,0x2B,0x2C,
0x2D,0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,
0x35,0x36,0x37,0x38,0x39,0x3A,0x3B,0x3C,
0x3D,0x3E,0x3F,0x00,0x00,0x00,0x00,0x00,
};


privatestaticfinalintcov_2char[]=
{
0x2E,0x2F,0x30,0x31,0x32,0x33,0x34,0x35,
0x36,0x37,0x38,0x39,0x41,0x42,0x43,0x44,
0x45,0x46,0x47,0x48,0x49,0x4A,0x4B,0x4C,
0x4D,0x4E,0x4F,0x50,0x51,0x52,0x53,0x54,
0x55,0x56,0x57,0x58,0x59,0x5A,0x61,0x62,
0x63,0x64,0x65,0x66,0x67,0x68,0x69,0x6A,
0x6B,0x6C,0x6D,0x6E,0x6F,0x70,0x71,0x72,
0x73,0x74,0x75,0x76,0x77,0x78,0x79,0x7A
};

(byteb)
{
intvalue=(int)b;

return(value>=0?value:value+256);
}

(byteb[],intoffset)
{
intvalue;

value=byteToUnsigned(b[offset++]);
value|=(byteToUnsigned(b[offset++])<<8);
value|=(byteToUnsigned(b[offset++])<<16);
value|=(byteToUnsigned(b[offset++])<<24);

return(value);
}

(intiValue,byteb[],intoffset)
{
b[offset++]=(byte)((iValue)&0xff);
b[offset++]=(byte)((iValue>>>8)&0xff);
b[offset++]=(byte)((iValue>>>16)&0xff);
b[offset++]=(byte)((iValue>>>24)&0xff);
}

privatestaticfinalvoidPERM_OP(inta,intb,intn,intm,intresults[])
{
intt;

t=((a>>>n)^b)&m;
a^=t<<n;
b^=t;

results[0]=a;
results[1]=b;
}

privatestaticfinalintHPERM_OP(inta,intn,intm)
{
intt;

t=((a<<(16-n))^a)&m;
a=a^t^(t>>>(16-n));

return(a);
}

privatestaticint[]des_set_key(bytekey[])
{
intschele[]=newint[ITERATIONS*2];

intc=fourBytesToInt(key,0);
intd=fourBytesToInt(key,4);

intresults[]=newint[2];

PERM_OP(d,c,4,0x0f0f0f0f,results);
d=results[0];c=results[1];

c=HPERM_OP(c,-2,0xcccc0000);
d=HPERM_OP(d,-2,0xcccc0000);

PERM_OP(d,c,1,0x55555555,results);
d=results[0];c=results[1];

PERM_OP(c,d,8,0x00ff00ff,results);
c=results[0];d=results[1];

PERM_OP(d,c,1,0x55555555,results);
d=results[0];c=results[1];

d=(((d&0x000000ff)<<16)|(d&0x0000ff00)|
((d&0x00ff0000)>>>16)|((c&0xf0000000)>>>4));
c&=0x0fffffff;

ints,t;
intj=0;

for(inti=0;i<ITERATIONS;i++)
{
if(shifts2[i])
{
c=(c>>>2)|(c<<26);
d=(d>>>2)|(d<<26);
}
else
{
c=(c>>>1)|(c<<27);
d=(d>>>1)|(d<<27);
}

c&=0x0fffffff;
d&=0x0fffffff;

s=skb[0][(c)&0x3f]|
skb[1][((c>>>6)&0x03)|((c>>>7)&0x3c)]|
skb[2][((c>>>13)&0x0f)|((c>>>14)&0x30)]|
skb[3][((c>>>20)&0x01)|((c>>>21)&0x06)|
((c>>>22)&0x38)];

t=skb[4][(d)&0x3f]|
skb[5][((d>>>7)&0x03)|((d>>>8)&0x3c)]|
skb[6][(d>>>15)&0x3f]|
skb[7][((d>>>21)&0x0f)|((d>>>22)&0x30)];

schele[j++]=((t<<16)|(s&0x0000ffff))&0xffffffff;
s=((s>>>16)|(t&0xffff0000));

s=(s<<4)|(s>>>28);
schele[j++]=s&0xffffffff;
}
return(schele);
}

privatestaticfinalintD_ENCRYPT
(
intL,intR,intS,intE0,intE1,ints[]
)
{
intt,u,v;

v=R^(R>>>16);
u=v&E0;
v=v&E1;
u=(u^(u<<16))^R^s[S];
t=(v^(v<<16))^R^s[S+1];
t=(t>>>4)|(t<<28);

L^=SPtrans[1][(t)&0x3f]|
SPtrans[3][(t>>>8)&0x3f]|
SPtrans[5][(t>>>16)&0x3f]|
SPtrans[7][(t>>>24)&0x3f]|
SPtrans[0][(u)&0x3f]|
SPtrans[2][(u>>>8)&0x3f]|
SPtrans[4][(u>>>16)&0x3f]|
SPtrans[6][(u>>>24)&0x3f];

return(L);
}

privatestaticfinalint[]body(intschele[],intEswap0,intEswap1)
{
intleft=0;
intright=0;
intt=0;

for(intj=0;j<25;j++)
{
for(inti=0;i<ITERATIONS*2;i+=4)
{
left=D_ENCRYPT(left,right,i,Eswap0,Eswap1,schele);
right=D_ENCRYPT(right,left,i+2,Eswap0,Eswap1,schele);
}
t=left;
left=right;
right=t;
}

t=right;

right=(left>>>1)|(left<<31);
left=(t>>>1)|(t<<31);

left&=0xffffffff;
right&=0xffffffff;

intresults[]=newint[2];

PERM_OP(right,left,1,0x55555555,results);
right=results[0];left=results[1];

PERM_OP(left,right,8,0x00ff00ff,results);
left=results[0];right=results[1];

PERM_OP(right,left,2,0x33333333,results);
right=results[0];left=results[1];

PERM_OP(left,right,16,0x0000ffff,results);
left=results[0];right=results[1];

PERM_OP(right,left,4,0x0f0f0f0f,results);
right=results[0];left=results[1];

intout[]=newint[2];

out[0]=left;out[1]=right;

return(out);
}

publicstaticfinalStringcrypt(Stringsalt,Stringoriginal)
{
while(salt.length()<2)
salt+="A";

StringBufferbuffer=newStringBuffer("");

charcharZero=salt.charAt(0);
charcharOne=salt.charAt(1);

buffer.setCharAt(0,charZero);
buffer.setCharAt(1,charOne);

intEswap0=con_salt[(int)charZero];
intEswap1=con_salt[(int)charOne]<<4;

bytekey[]=newbyte[8];

for(inti=0;i<key.length;i++)
key[i]=(byte)0;

for(inti=0;i<key.length&&i<original.length();i++)
{
intiChar=(int)original.charAt(i);

key[i]=(byte)(iChar<<1);
}

intschele[]=des_set_key(key);
intout[]=body(schele,Eswap0,Eswap1);

byteb[]=newbyte[9];

intToFourBytes(out[0],b,0);
intToFourBytes(out[1],b,4);
b[8]=0;

for(inti=2,y=0,u=0x80;i<13;i++)
{
for(intj=0,c=0;j<6;j++)
{
c<<=1;

if(((int)b[y]&u)!=0)
c|=1;

u>>>=1;

if(u==0)
{
y++;
u=0x80;
}
buffer.setCharAt(i,(char)cov_2char[c]);
}
}
return(buffer.toString());
}

publicstaticvoidmain(Stringargs[])
{
if(args.length>=2)
{
System.out.println
(
"["+args[0]+"]["+args[1]+"]=>["+
JCrypt.crypt(args[0],args[1])+"]"
);
}
}
}

‘贰’ 怎么用php编写加减乘除

可以参考下面的代码:

<?php

$a = 1;

$b = 2;

加法: $sum = $a + $b;

减法: $sum = $a - $b;

乘法: $sum = $a * $b;

除法: $sum = $a / $b;

(2)php中crypt扩展阅读:

PHP的加密函数有crypt()、 md5() 和sha1() 这3种, 其中crypt() 用于单向加密, 所谓的单向加密就是将需要加密的内容进行加密之后, 无法将密文转换成为可读的内容, 因此单向加密的应用范围较狭窄, 一般用于用户名认证和密码输入等情况。

当用户进入系统时,只需要将密文口令输 入,经过系统验证与存储的口令一致, 即可通过。

sha1() 函数使用了SHA-1的散列算法,其原理与md5() 类似。

‘叁’ 求助老师:关于php+mysql密码加密与登录问题

如果你得php版本在5.5以上的话可以直接使用php推出的一个password_hash方法对密码进行加密,

或者使用这个polyfill可以达到一样的效果
$salt = mcrypt_create_iv(22, MCRYPT_DEV_URANDOM);
$salt = base64_encode($salt);
$salt = str_replace('+', '.', $salt);
$hash = crypt('rasmuslerdorf', '$2y$10$'.$salt.'$');
echo $hash

‘肆’ 鍦≒HP寮鍙戜腑鍏绉嶅姞瀵嗙殑鏂规硶锛屼綘鐢ㄧ殑鏄鍝绉嶏纻

鍦≒HP寮鍙戠殑涓栫晫閲岋纴鏁版嵁镄勫畨鍏ㄦц呖鍏抽吨瑕併傝╂垜浠娣卞叆鎺㈣ㄥ叚绉嶅父瑙佺殑锷犲瘑鏂规硶锛岀湅鐪嬩綘鍦ㄥ疄闄呴”鐩涓鏄濡备綍杩愮敤镄勚

棣栧厛锛屾垜浠浠嶱HP鍐呯疆镄勫姞瀵嗗嚱鏁拌皥璧枫侾HP涓烘垜浠鎻愪緵浜嗕袱绉嶆埅铹朵笉钖岀殑锷犲瘑镓嬫碉细涓嶅彲阃嗙殑鍜屽彲阃嗙殑銆备笉鍙阃嗙殑濡md5()锛屽畠鐢熸垚镄勫搱甯屽兼槸鍗曞悜镄勶纴鐢ㄤ簬纭淇濇暟鎹镄勫敮涓镐э纴钥crypt()鍒欐槸鍗曞悜DES锷犲瘑锛岄傚悎浜庡瘑镰佸瓨鍌ㄣ傜浉鍙嶏纴base64_encode()urlencode()杩欑被鏂规硶锛屽傜绣缁滀紶杈撴椂甯哥敤锛岄氲繃MIME BASE64缂栫爜渚夸簬璺ㄥ钩鍙颁紶杈掳纴浣嗗畠浠鏄鍙阃嗙殑锛屾湁瀵瑰簲镄勮В瀵嗗嚱鏁板base64_decode()

鎺ョ潃锛屾垜浠𨱒ョ湅涓や釜瀹为檯搴旂敤涓镄勫姞瀵嗗嚱鏁扮ず渚嬨备竴鏄lock_url()锛屽畠宸у椤湴缁揿悎浜哢RL缂栫爜鍜岀壒娈婂瓧绗︾殑澶勭悊锛岄氲繃绠楁硶灏呜緭鍏ョ殑瀛楃︿覆锷犲瘑钖庤繘琛屼紶杈撱傚彟涓涓鏄缁忚繃绮剧亩镄勫姞瀵嗗嚱鏁帮纴濡passport_encrypt()锛屽悓镙烽噰鐢ㄧ紪镰佸拰瀵嗛挜镎崭綔锛岀‘淇濇暟鎹鍦ㄤ紶杈扑腑镄勫畨鍏ㄦс

鍦ㄩ”鐩涓锛屾洿涓哄嶆潅镄勫姞瀵嗗勭悊鍙鑳芥秹鍙娄娇鐢ㄥauthcode()杩欐牱镄勮嚜瀹氢箟鍑芥暟銆傚畠镙规嵁杈揿叆镄勬槑鏂囥佹搷浣灭被鍨嬶纸锷犲瘑鎴栬В瀵嗭级鍜屽瘑阍ワ纴鐢熸垚锷ㄦ佸瘑阍ュ苟镓ц屽姞瀵嗘牳蹇幂畻娉曘傝繖绉嶅姛鑳藉湪鐢ㄦ埛锏诲綍楠岃瘉鍜孉PI鏁版嵁浜ゆ崲涓灏や负甯歌併

链钖庯纴璁╂垜浠鎺㈢储涓绉嶆洿涓虹伒娲荤殑锷犲瘑瑙e瘑妯″纺銆傞氲繃瀹氢箟鍑芥暟濡encrypt()锛屾垜浠鍙浠ヤ娇鐢∕D5浣滀负瀵嗛挜鐢熸垚鍣锛屽苟缁揿悎Base64缂栫爜锛屽疄鐜颁简鍙屽悜镎崭綔銆傝繖涓渚嫔瓙灞旷ず浜嗗备綍瀵瑰瓧绗︿覆杩涜屽姞瀵嗗拰瑙e瘑锛屼互婊¤冻涓嶅悓镄勫簲鐢ㄥ満鏅銆

鍦ㄤ綘镄凯HP寮鍙戞梾绋嬩腑锛岄夋嫨鍝绉嶅姞瀵嗘柟娉曞彇鍐充簬鍏蜂綋闇姹伞备笉鍙阃嗙殑鍝埚笇鍑芥暟阃傜敤浜庨獙璇佹暟鎹瀹屾暣镐э纴钥屽彲阃嗙殑缂栫爜鏂规硶阃傜敤浜庢暟鎹浜ゆ崲銆傝颁綇锛屾疮涓椤圭洰閮芥湁鍏剁壒瀹氱殑瀹夊叏瑕佹眰锛岄夋嫨阃傚悎镄勫姞瀵嗙瓥鐣ヨ呖鍏抽吨瑕併

鍦ㄨ拷姹傚畨鍏ㄧ殑钖屾椂锛屼笉瑕佸缮璁板叧娉ㄦ垜浠镄勫叕浼楀彿锛歅HP浠庡叆闂ㄥ埌绮鹃氾纴闾i噷链夋洿澶氲繘阒剁煡璇嗗拰瀹炵敤璧勬簮锛屽府锷╀綘鎻愬崌鎶鑳斤纴瑙e喅杩涢桩闂棰樸傛棤璁轰綘鏄鏂版坠杩樻槸璧勬繁寮鍙戣咃纴杩欓噷閮芥湁阃傚悎浣犵殑鍐呭广备竴璧锋帰绱PHP镄勬棤闄愬彲鑳斤纴鎻愬崌浣犵殑鎶链瀹炲姏銆

‘伍’ php代码怎么加密最好,不能破解的那种

在使用PHP开发Web应用的中,很多的应用都会要求用户注册,而注册的时候就需要我们对用户的信息进行处理了,最常见的莫过于就是邮箱和密码了,本文意在讨论对密码的处理:也就是对密码的加密处理。
MD5
相信很多PHP开发者在最先接触PHP的时候,处理密码的首选加密函数可能就是MD5了,我当时就是这样的:
$password = md5($_POST["password"]);
上面这段代码是不是很熟悉?然而MD5的加密方式目前在PHP的江湖中貌似不太受欢迎了,因为它的加密算法实在是显得有点简单了,而且很多破解密码的站点都存放了很多经过MD5加密的密码字符串,所以这里我是非常不提倡还在单单使用MD5来加密用户的密码的。
SHA256 和 SHA512
其实跟前面的MD5同期的还有一个SHA1加密方式的,不过也是算法比较简单,所以这里就一笔带过吧。而这里即将要说到的SHA256 和 SHA512都是来自于SHA2家族的加密函数,看名字可能你就猜的出来了,这两个加密方式分别生成256和512比特长度的hash字串。
他们的使用方法如下:
<?php
$password = hash("sha256", $password);
PHP内置了hash()函数,你只需要将加密方式传给hash()函数就好了。你可以直接指明sha256, sha512, md5, sha1等加密方式。
盐值
在加密的过程,我们还有一个非常常见的小伙伴:盐值。对,我们在加密的时候其实会给加密的字符串添加一个额外的字符串,以达到提高一定安全的目的:
<?php
function generateHashWithSalt($password) {$intermediateSalt = md5(uniqid(rand(), true));$salt = substr($intermediateSalt, 0, 6);
return hash("sha256", $password . $salt);}
Bcrypt
如果让我来建议一种加密方式的话,Bcrypt可能是我给你推荐的最低要求了,因为我会强烈推荐你后面会说到的Hashing API,不过Bcrypt也不失为一种比较不错的加密方式了。
<?php
function generateHash($password) {
if (defined("CRYPT_BLOWFISH") && CRYPT_BLOWFISH) {$salt = '$2y$11$' . substr(md5(uniqid(rand(), true)), 0, 22);return crypt($password, $salt);
}
}
Bcrypt 其实就是Blowfish和crypt()函数的结合,我们这里通过CRYPT_BLOWFISH判断Blowfish是否可用,然后像上面一样生成一个盐值,不过这里需要注意的是,crypt()的盐值必须以$2a$或者$2y$开头,详细资料可以参考下面的链接:
http://www.php.net/security/crypt_blowfish.php更多资料可以看这里:
http://php.net/manual/en/function.crypt.phpPassword Hashing API
这里才是我们的重头戏,Password Hashing API是PHP 5.5之后才有的新特性,它主要是提供下面几个函数供我们使用:
password_hash() – 对密码加密.
password_verify() – 验证已经加密的密码,检验其hash字串是否一致.
password_needs_rehash() – 给密码重新加密.
password_get_info() – 返回加密算法的名称和一些相关信息.
虽然说crypt()函数在使用上已足够,但是password_hash()不仅可以使我们的代码更加简短,而且还在安全方面给了我们更好的保障,所以,现在PHP的官方都是推荐这种方式来加密用户的密码,很多流行的框架比如Laravel就是用的这种加密方式。
<?php
$hash = password_hash($passwod, PASSWORD_DEFAULT);对,就是这么简单,一行代码,All done。
PASSWORD_DEFAULT目前使用的就是Bcrypt,所以在上面我会说推荐这个,不过因为Password Hashing API做得更好了,我必须郑重地想你推荐Password Hashing API。这里需要注意的是,如果你代码使用的都是PASSWORD_DEFAULT加密方式,那么在数据库的表中,password字段就得设置超过60个字符长度,你也可以使用PASSWORD_BCRYPT,这个时候,加密后字串总是60个字符长度。
这里使用password_hash()你完全可以不提供盐值(salt)和 消耗值 (cost),你可以将后者理解为一种性能的消耗值,cost越大,加密算法越复杂,消耗的内存也就越大。当然,如果你需要指定对应的盐值和消耗值,你可以这样写:
<?php
$options = [
'salt' => custom_function_for_salt(), //write your own code to generate a suitable salt'cost' => 12 // the default cost is 10
];
$hash = password_hash($password, PASSWORD_DEFAULT, $options);密码加密过后,我们需要对密码进行验证,以此来判断用户输入的密码是否正确:
<?php
if (password_verify($password, $hash)) {
// Pass
}
else {
// Invalid
}
很简单的吧,直接使用password_verify就可以对我们之前加密过的字符串(存在数据库中)进行验证了。
然而,如果有时候我们需要更改我们的加密方式,如某一天我们突然想更换一下盐值或者提高一下消耗值,我们这时候就要使用到password_needs_rehash()函数了:
<?php
if (password_needs_rehash($hash, PASSWORD_DEFAULT, ['cost' => 12])) {// cost change to 12
$hash = password_hash($password, PASSWORD_DEFAULT, ['cost' => 12]);// don't forget to store the new hash!
}
只有这样,PHP的Password Hashing API才会知道我们重现更换了加密方式,这样的主要目的就是为了后面的密码验证。
简单地说一下password_get_info(),这个函数一般可以看到下面三个信息:
algo – 算法实例
algoName – 算法名字
options – 加密时候的可选参数
所以,现在就开始用PHP 5.5吧,别再纠结低版本了。
Happy Hacking

‘陆’ php 登录注册用哈希加密怎么做

//加密

$hash_password = hash_password($password, PASSWORD_DEFAULT);

//验证

if (password_verify($password, $hash_password)) {

//密码正确

} else {

//密码错误

}

‘柒’ PHP如何取得数组的上标和下标

获取下标:$array=array('a'=>1,'b'=>3,'c'=>4);$a=array_keys($array);echo end($a)。

PHP的加密函数有crypt()、 md5() 和sha1() 这3种, 其中crypt() 用于单向加密, 所谓的单向加密就是将需要加密的内容进行加密之后, 无法将密文转换成为可读的内容。

因此单向加密的应用范围较狭窄, 一般用于用户名认证和密码输入等情况; 当用户进入系统时,只需要将密文口令输 入,经过系统验证与存储的口令一致, 即可通过。

(7)php中crypt扩展阅读:

主要特点:

(一)开源性和免费性

由于PHP的解释器的源代码是公开的,所以安全系数较高的网站可以自己更改PHP的解释程序。另外,PHP 运行环境的使用也是免费的。

(二)快捷性

PHP是一种非常容易学习和使用的一门语言,它的语法特点类似于C语言,但又没有C语言复杂的地址操作,而且又加入了面向对象的概念,再加上它具有简洁的语法规则,使得它操作编辑非常简单,实用性很强。

(三)数据库连接的广泛性

PHP可以与很多主流的数据库建立起连接,如MySQL、ODBC、Oracle等,PHP是利用编译的不同函数与这些数据库建立起连接的,PHPLIB就是常用的为一般事务提供的基库。

阅读全文

与php中crypt相关的资料

热点内容
做喊麦需要什么app 浏览:202
数字信号处理算法的labview实现 浏览:9
复制加密狗还能复制吗 浏览:541
安阳市最大的编程培训学校 浏览:965
androidhttp压缩 浏览:554
联想服务器如何进入阵列卡 浏览:848
拍照文件夹怎么用 浏览:974
公司清算法定代表人章交回本人 浏览:639
xfs为什么不能压缩 浏览:409
获取手机数据源码 浏览:962
迪杰斯特拉算法matlab 浏览:915
迅雷百度云文件解压密码 浏览:464
为什么好多app找不到注销了 浏览:289
javazxing二维码生成 浏览:122
算法递推式 浏览:147
联想加载加密锁失败 浏览:209
赛拉图空调压缩机多少钱 浏览:196
linuxphppdo扩展 浏览:791
如何解决美国服务器网络延迟 浏览:424
手机看app闪退是什么问题 浏览:692