-
crypt
(C語言函數之一)
鎖定
crypt(const char *key, const char *salt) 函數為C語言函數之一,返回使用 DES、Blowfish 或 MD5 加密的字符串。 在不同的操作系統上,本函數的行為不同,某些操作系統支持一種以上的算法類型。在安裝時,PHP 會檢查什麼算法可用以及使用什麼算法。
- 中文名
- crypt 庫
- 外文名
- crypt
- 參數1
- str
- 參數2
- salt
- str
- 需加密的字符串
- salt
- 密碼學中的鹽值
crypt語法
crypt(str,salt) |
參數 | 描述 |
str | 必需。規定要編碼的字符串。 |
salt | 可選。用於增加被編碼字符數目的字符串,以使編碼更加安全。 如果未提供 salt 參數,則每次調用該函數時會隨機生成一個。 |
Linux 函數原型
char *crypt(const char *key, const char *salt);
key:要加密的明文。
salt:密鑰。
salt 默認使用DES加密方法。DES加密時,salt只能取兩個字符,多出的字符會被丟棄。
crypt説明
確切的算法依賴於 salt 參數的格式和長度。
下面是與 crypt() 函數一起使用的一些常量。在安裝時,由 PHP 設置這些常量:
[CRYPT_SALT_LENGTH]
[CRYPT_STD_DES]
[CRYPT_EXT_DES]
[CRYPT_MD5]
[CRYPT_BLOWFISH]
(1)salt這個字符串如果以$1$開頭,以$結尾,那麼這表示讓crypt用MD5的方式加密,加密後出來的密文格式就是 $1$...$<密文正文> ,夾在$1$和$之間的字符串就是我們指定的密鑰文字。這個密鑰文字最多不能超過8個字符。
(2)如果salt字符串不是(1)方式的格式,那默認就用DES加密方法。DES加密時,salt只能取兩個字符,也就是説,salt最多不能 超過2個字符,多出的字符會被丟棄,用DES加密出來的密文前兩個字符就是密鑰。後面緊跟着的就是真正的密文。
如需更詳細C語言的使用方法,請在GNU系統終端內輸入:
$ man crypt
crypt提示和註釋
提示:解密函數是沒有的。crypt() 函數使用一種單向算法。
crypt例子
在本例中,我們將測試不同的算法:
<?php if (CRYPT_STD_DES == 1) { echo "Standard DES: ".crypt("hello world")."\n<br />"; } else { echo "Standard DES not supported.\n<br />"; } if (CRYPT_EXT_DES == 1) { echo "Extended DES: ".crypt("hello world")."\n<br />"; } else { echo "Extended DES not supported.\n<br />"; } if (CRYPT_MD5 == 1) { echo "MD5: ".crypt("hello world")."\n<br />"; } else { echo "MD5 not supported.\n<br />"; } if (CRYPT_BLOWFISH == 1) { echo "Blowfish: ".crypt("hello world"); } else { echo "Blowfish DES not supported."; } ?>
輸出類似(依賴於操作系統):
Standard DES: $1$x1..m51.$S9eN2XHx9aLlymysul5S61
Extended DES: $1$1/1..P0.$Ne8OHrwbeApGOs7qMveZO1
MD5: $1$tz0.yg5.$jzwIVaBJMDuO6kjwusuNm.
Blowfish: $1$Tq..gv4.$Sbegig2uoMeuFkptKWnyk1
PHP String 函數
- 參考資料
-
- 1. GNU C語言庫 33.3 加密密碼 .GNU Operating System[引用日期2017-05-19]