Главная страница


ru.unix.bsd

 
 - RU.UNIX.BSD ------------------------------------------------------------------
 From : damir bikmuhametov                   2:5020/400     09 Nov 2005  16:49:28
 To : damir bikmuhametov
 Subject : Re: crypt() в php
 -------------------------------------------------------------------------------- 
 
 Hello, damir!
 You wrote to Dmitry Miloserdov on Wed, 9 Nov 2005 11:13:23 +0000 (UTC):
 
 db> придется таки подхачить crypt.c из php, чтобы в случае, когда
 db> длина входящей соли равна 2, передавал crypt(3) соль именно
 db> такой длины, а не дополненную символами '$' до PHP_MAX_SALT_LEN.
 
 уфф... ничего не понимаю. сделал как хотел, руками развернул макрос
 RETURN_STRING, навтыкал отладочной печати:
 
 === cut ===
 PHP_FUNCTION(crypt)
 {
         char salt[PHP_MAX_SALT_LEN+1];
         char *str, *salt_in = NULL;
         int str_len, salt_in_len;
 
         salt[0]=salt[PHP_MAX_SALT_LEN]='\0';
         /* This will produce suitable results if people depend on
 DES-encryption
            available (passing always 2-character salt). At least for
 glibc6.1 */
         memset(&salt[1], '$', PHP_MAX_SALT_LEN-1);
 
         if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s|s", &str,
 &str_len,
                                                           &salt_in,
 &salt_in_len) == FAILURE) {
                 return;
         }
 
         if (salt_in) {
                 memcpy(salt, salt_in, MIN(PHP_MAX_SALT_LEN, salt_in_len));
                 /* XXX */
                 if (MIN(PHP_MAX_SALT_LEN, salt_in_len) == 2)
                         salt[2] = '\0';
         }
 
         /* The automatic salt generation only covers standard DES and
 md5-crypt */
         if(!*salt) {
 #if PHP_MD5_CRYPT
                 strcpy(salt, "$1$");
                 php_to64(&salt[3], PHP_CRYPT_RAND, 4);
                 php_to64(&salt[7], PHP_CRYPT_RAND, 4);
                 strcpy(&salt[11], "$");
 #elif PHP_STD_DES_CRYPT
                 php_to64(&salt[0], PHP_CRYPT_RAND, 2);
                 salt[2] = '\0';
 #endif
         }
 
         printf("str = '%s', salt = '%s'\n", str, salt);
 
         printf("crypt() = '%s'\n", crypt(str, salt));
 
         char *__s = crypt(str, salt);
 
         printf("__s = '%s'\n", __s);
 
         return_value->value.str.len = strlen(__s);
         return_value->value.str.val = estrndup(__s,
 return_value->value.str.len);
         return_value->type = IS_STRING;
 }
 /* }}} */
 === cut ===
 
 вот результат:
 
 # ./php -n /root/1.php
 str = '123456', salt = '__'
 crypt() = '(null)'
 __s = '(null)'
 Segmentation fault (core dumped)
 
 # gdb ./php ./php.core
 ...
 #0  0x0808a8a4 in zif_crypt (ht=0, return_value=0x820d3a4, this_ptr=0x0,
 return_value_used=1)
     at /usr/ports/lang/php5/work/php-5.0.5/ext/standard/crypt.c:160
 160             return_value->value.str.len = strlen(__s);
 (gdb)
 
 написал простейшую программку:
 
 === cut ===
 #include <unistd.h>
 
 int main()
 {
         printf("%s\n", crypt("123456", "__"));
 }
 === cut ===
 
 # ./test
 __LOg./3jE1/M
 
 хелп ми!
 
 With best regards, damir bikmuhametov.
 --- ifmail v.2.15dev5.3
  * Origin: OOO BIS (2:5020/400)
 
 

Вернуться к списку тем, сортированных по: возрастание даты  уменьшение даты  тема  автор 

 Тема:    Автор:    Дата:  
 crypt() в php   damir bikmuhametov   09 Nov 2005 03:30:18 
 Re: crypt() в php   Dmitry Miloserdov   09 Nov 2005 14:01:51 
 Re: crypt() в php   damir bikmuhametov   09 Nov 2005 15:13:23 
 Re: crypt() в php   Dmitry Miloserdov   09 Nov 2005 16:42:47 
 crypt() в php   damir bikmuhametov   11 Nov 2005 08:06:20 
 Re: crypt() в php   Dmitry Miloserdov   11 Nov 2005 14:24:58 
 crypt() в php   damir bikmuhametov   12 Nov 2005 14:24:02 
 Re: crypt() в php   damir bikmuhametov   09 Nov 2005 16:49:28 
 Re: crypt() в php   Valentin Nechayev   13 Nov 2005 01:46:54 
 crypt() в php   Ilya Kulagin   14 Nov 2005 16:00:56 
Архивное /ru.unix.bsd/7795b153a0d7.html, оценка 2 из 5, голосов 10
Яндекс.Метрика
Valid HTML 4.01 Transitional