warning: Creating default object from empty value in /var/www/drupal-5.23/modules/taxonomy/taxonomy.module on line 1418.
インターネットで最も使われている暗号化通信は
SSL/TLS であろう。
SSL は
Secure Socket Layer の略で、
TLS は
Transport Layer Security の略、前者はバージョン3まで Netscape によって作られ、後者は IETF で仕様が策定されているものである。
インターネットで最も使われている暗号化通信は
SSL/TLS であろう。
SSL は
Secure Socket Layer の略で、
TLS は
Transport Layer Security の略、前者はバージョン3まで Netscape によって作られ、後者は IETF で仕様が策定されているものである。
Posted on 2006-10-02 by yas |
以下のコードを参考のこと。sha1 なので 160ビットの固定長の値は仕様であり、画面への出力は 40バイト固定長の16進数の文字列である(160ビット=160 / 8ビット=バイナリ 20バイト→人間の目に見える形式だとテキスト文字列 40バイト)。
<?php
$content = "ここに HTML などのコンテンツが入る";
$digest = sha1($content); // コンテンツのハッシュ値 (16進数)
print $digest;
?>
以下のコードを参考のこと。sha1 なので 160ビットの固定長の値は仕様であり、画面への出力は 40バイト固定長の16進数の文字列である(160ビット=160 / 8ビット=バイナリ 20バイト→人間の目に見える形式だとテキスト文字列 40バイト)。
<?php
$content = "ここに HTML などのコンテンツが入る";
$digest = sha1($content); // コンテンツのハッシュ値 (16進数)
print $digest;
?>
Posted on 2006-09-25 by yas |
ウェブページへのアクセスログを記録する方法は、いろいろな方法があると思う。もっとも簡単なのは Apache などのウェブサーバが自動的に記録するログをチェックすることで、これには何の手間もいらない。しかし、レンタルサーバなどでログが自由に扱えない場合はどうしたらいいのだろう?
そのひとつが、
画像としてリンクされている Perl などの CGI を呼び出す方法だ。利用者に知られずこっそりとアクセスログを取るには 1x1 ピクセルの画像をそのウェブページの背景と共に表示してしまえば、そのウェブページのソースをチェックされない限り、ほとんどの場合は気づかれずにすむだろう。
そんなわけで、以下のように JavaScript と対応する Perl スクリプトで、アクセスログを記録する仕組みを作ってみた。ログの形式は Apache に準拠する(たぶん)。
ウェブページへのアクセスログを記録する方法は、いろいろな方法があると思う。もっとも簡単なのは Apache などのウェブサーバが自動的に記録するログをチェックすることで、これには何の手間もいらない。しかし、レンタルサーバなどでログが自由に扱えない場合はどうしたらいいのだろう?
そのひとつが、
画像としてリンクされている Perl などの CGI を呼び出す方法だ。利用者に知られずこっそりとアクセスログを取るには 1x1 ピクセルの画像をそのウェブページの背景と共に表示してしまえば、そのウェブページのソースをチェックされない限り、ほとんどの場合は気づかれずにすむだろう。
そんなわけで、以下のように JavaScript と対応する Perl スクリプトで、アクセスログを記録する仕組みを作ってみた。ログの形式は Apache に準拠する(たぶん)。
Posted on 2006-09-18 by yas |
以下がサンプルコード。Win32 Crypto API を使うコンソールアプリです。
// HashTest.cpp : Defines the entry point for the console application.
// Copyright (c) 2005, 2006 twinkle.cc All Rights Reserved.
//
//" title="https://perltips.twinkle.cc/
//">https://perltips.twinkle.cc/
// perltips@gmail.com
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <wincrypt.h>
int _tmain(int argc, _TCHAR* argv[])
{
#define BUFFER_LEN 253
#define SHA1LEN 20
PCHAR pcMessage;
DWORD ccMessage;
DWORD dwStatus = 0;
HCRYPTPROV hProv = 0;
HCRYPTHASH hHash = 0;
BYTE pbHash[SHA1LEN];
BYTE pbRandom[BUFFER_LEN];
DWORD cbHash = 0;
CHAR pcDigits[] = "0123456789ABCDEF";
CHAR pcHash[SHA1LEN * 2 + 1];
//Get handle to the crypto provider
if (!CryptAcquireContext(&hProv,
NULL,
NULL,
PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT))
{
dwStatus = GetLastError();
goto done;
}
// Get a random value
if( CryptGenRandom(
hProv,
BUFFER_LEN,
pbRandom))
{
printf("%d bytes of random data have been generated.\n", BUFFER_LEN);
}
else
{
dwStatus = GetLastError();
printf("Random bytes were not correctly generated.\n");
goto done;
}
if (!CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash))
{
dwStatus = GetLastError();
goto done;
}
if (!CryptHashData(hHash, pbRandom, BUFFER_LEN, 0))
{
dwStatus = GetLastError();
printf("CryptHashData failed: %d\n", dwStatus);
goto done;
}
cbHash = SHA1LEN;
if (CryptGetHashParam(hHash, HP_HASHVAL, pbHash, &cbHash, 0))
{
printf("SHA1 hash is: ");
for (DWORD i = 0; i < cbHash; i++)
{
pcHash[i * 2] = pcDigits[pbHash[i] >> 4];
pcHash[i * 2 + 1 ] = pcDigits[pbHash[i] & 0xf];
pcHash[i * 2 + 2 ] = '\0';
}
printf("%s\n", pcHash);
}
else
{
dwStatus = GetLastError();
printf("CryptGetHashParam failed: %d\n", dwStatus);
}
done:
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
WCHAR pwcMessage[BUFFER_LEN];
MultiByteToWideChar(CP_ACP, 0, pcHash, sizeof(pcHash), pwcMessage, sizeof(pwcMessage));
ccMessage = ( DWORD ) wcslen( pwcMessage );
if( ( pcMessage = ( PCHAR ) malloc( ccMessage + 1 ) ) )
{
WideCharToMultiByte( CP_ACP, 0, pwcMessage, -1, pcMessage, ccMessage + 1, NULL, NULL );
printf("malloc ok: %s\n", pcMessage);
}
else
{
printf("Not enough memory");
dwStatus = ERROR_NOT_ENOUGH_MEMORY;
}
return dwStatus;
}
以下がサンプルコード。Win32 Crypto API を使うコンソールアプリです。
// HashTest.cpp : Defines the entry point for the console application.
// Copyright (c) 2005, 2006 twinkle.cc All Rights Reserved.
//
//" title="https://perltips.twinkle.cc/
//">https://perltips.twinkle.cc/
// perltips@gmail.com
#include "stdafx.h"
#include <stdio.h>
#include <windows.h>
#include <wincrypt.h>
int _tmain(int argc, _TCHAR* argv[])
{
#define BUFFER_LEN 253
#define SHA1LEN 20
PCHAR pcMessage;
DWORD ccMessage;
DWORD dwStatus = 0;
HCRYPTPROV hProv = 0;
HCRYPTHASH hHash = 0;
BYTE pbHash[SHA1LEN];
BYTE pbRandom[BUFFER_LEN];
DWORD cbHash = 0;
CHAR pcDigits[] = "0123456789ABCDEF";
CHAR pcHash[SHA1LEN * 2 + 1];
//Get handle to the crypto provider
if (!CryptAcquireContext(&hProv,
NULL,
NULL,
PROV_RSA_FULL,
CRYPT_VERIFYCONTEXT))
{
dwStatus = GetLastError();
goto done;
}
// Get a random value
if( CryptGenRandom(
hProv,
BUFFER_LEN,
pbRandom))
{
printf("%d bytes of random data have been generated.\n", BUFFER_LEN);
}
else
{
dwStatus = GetLastError();
printf("Random bytes were not correctly generated.\n");
goto done;
}
if (!CryptCreateHash(hProv, CALG_SHA1, 0, 0, &hHash))
{
dwStatus = GetLastError();
goto done;
}
if (!CryptHashData(hHash, pbRandom, BUFFER_LEN, 0))
{
dwStatus = GetLastError();
printf("CryptHashData failed: %d\n", dwStatus);
goto done;
}
cbHash = SHA1LEN;
if (CryptGetHashParam(hHash, HP_HASHVAL, pbHash, &cbHash, 0))
{
printf("SHA1 hash is: ");
for (DWORD i = 0; i < cbHash; i++)
{
pcHash[i * 2] = pcDigits[pbHash[i] >> 4];
pcHash[i * 2 + 1 ] = pcDigits[pbHash[i] & 0xf];
pcHash[i * 2 + 2 ] = '\0';
}
printf("%s\n", pcHash);
}
else
{
dwStatus = GetLastError();
printf("CryptGetHashParam failed: %d\n", dwStatus);
}
done:
CryptDestroyHash(hHash);
CryptReleaseContext(hProv, 0);
WCHAR pwcMessage[BUFFER_LEN];
MultiByteToWideChar(CP_ACP, 0, pcHash, sizeof(pcHash), pwcMessage, sizeof(pwcMessage));
ccMessage = ( DWORD ) wcslen( pwcMessage );
if( ( pcMessage = ( PCHAR ) malloc( ccMessage + 1 ) ) )
{
WideCharToMultiByte( CP_ACP, 0, pwcMessage, -1, pcMessage, ccMessage + 1, NULL, NULL );
printf("malloc ok: %s\n", pcMessage);
}
else
{
printf("Not enough memory");
dwStatus = ERROR_NOT_ENOUGH_MEMORY;
}
return dwStatus;
}
Posted on 2006-09-12 by yas |