導航:首頁 > 編程語言 > 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相關的資料

熱點內容
安陽市最大的編程培訓學校 瀏覽:965
androidhttp壓縮 瀏覽:554
聯想伺服器如何進入陣列卡 瀏覽:848
拍照文件夾怎麼用 瀏覽:974
公司清演算法定代表人章交回本人 瀏覽:639
xfs為什麼不能壓縮 瀏覽:409
獲取手機數據源碼 瀏覽:962
迪傑斯特拉演算法matlab 瀏覽:915
迅雷百度雲文件解壓密碼 瀏覽:464
為什麼好多app找不到注銷了 瀏覽:289
javazxing二維碼生成 瀏覽:122
演算法遞推式 瀏覽:147
聯想載入加密鎖失敗 瀏覽:209
賽拉圖空調壓縮機多少錢 瀏覽:196
linuxphppdo擴展 瀏覽:791
如何解決美國伺服器網路延遲 瀏覽:424
手機看app閃退是什麼問題 瀏覽:692
怎麼智能電視安裝不了app 瀏覽:886
python平衡組 瀏覽:374
一邊是柱子一邊是梁怎麼加密 瀏覽:49