Visual Studioと戯れている

ひさしぶりに、Visual Studioと戯れている

InternetSetStatusCallback

Both synchronous and asynchronous functions use the callback function to indicate the progress of the request, such as resolving a name, connecting to a server, and so on. The callback function is required for an asynchronous operation. The asynchronous request will call back to the application with INTERNET_STATUS_REQUEST_COMPLETE to indicate the request has been completed.

InternetSetStatusCallback function | Microsoft Docs https://docs.microsoft.com/en-us/windows/desktop/api/wininet/nf-wininet-internetsetstatuscallback

Using WinInet HTTP functions in Full Asynchronous Mode – CodeProject

HTTP HEADER

プログラム メモ

HTTP HEADER

HTTP ETag – Wikipedia
If-None-Match: “686897696a7c876b7e”
ETag: “686897696a7c876b7e”
CRC32/ CRC64
HTTP ETag – Wikipedia https://en.wikipedia.org/wiki/HTTP_ETag

If-Modified-Since: Wed, 21 Oct 2015 07:28:00 GMT
If-Modified-Since – HTTP | MDN https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/If-Modified-Since

HTTP RESPONSE

304 Not Modified

How to get Process.name from processID


void GetProcessNameByProcessID(DWORD PID, std::wstring &name)
{
	//Moe Suzuki

	HANDLE hProceess = OpenProcess(PROCESS_QUERY_INFORMATION | PROCESS_VM_READ, FALSE, PID);
	if (hProceess==NULL)
	{
		name = _TEXT("none");
		return;
	}

	size_t short_path_buffer_size = MAX_PATH > 4192 ? MAX_PATH : 4192;

	std::vector short_path_buffer(short_path_buffer_size);

	TCHAR *buf_short_name = &short_path_buffer.at(0);

	DWORD short_name_return = GetModuleFileNameEx(hProceess, 0, buf_short_name, short_path_buffer_size);
	if(short_name_return==0)
	{
		name = _TEXT("none");
		CloseHandle(hProceess);
		return;
	}

	DWORD long_path_size = GetFullPathName(buf_short_name, 0, NULL, NULL);
	if (long_path_size == 0)
	{
		name = _TEXT("none");
		CloseHandle(hProceess);
		return;
	}

	long_path_size += 128;
	std::vector buffer_full_path(long_path_size);
	TCHAR *full_path_buffer = &buffer_full_path.at(0);
	TCHAR *buf_long_name = &buffer_full_path.at(0);
	TCHAR *filename;

	long_path_size = GetFullPathName(buf_short_name, long_path_size, full_path_buffer, &filename);
	if (long_path_size == 0)
	{
		name = _TEXT("none");
		CloseHandle(hProceess);
		return;
	}

	char buf[4096];
	if (sizeof(TCHAR) == 1) {
		sprintf_s(buf, 4096, "filename = %s \r\n", filename);
	}else {
		sprintf_s(buf, 4096, "filename = %ls \r\n", filename);
		name = filename;

	}
	OutputDebugStringA(buf);
	CloseHandle(hProceess);

}

サンプルコード その2

なんかさ・・・
サンプルコード書かないと 少しは書けよっていわれて
書くとさ
無駄なコード書いてる暇があったら 婚活しろ みたいにわれてさ

つらたん。(言ってくれる友だちなどいない)

サンプルコード 長いので 続きを読む にしました。


————- 続きを読む » ( Read More )————-

ファイルをTrimするサンプル (PHP サンプルコード)

とあるファイルをTrimするPHPのサンプルコードです。

名称未設定

コピペしたい方は
こちらです。

https://ideone.com/JF0kNM

濃縮還元のめんつゆは、先に薄めたつゆを作ってストックしておく+1テクニック

自宅で そばやうどんを 作る時に
つゆってどうしますか?

通常は 5-6倍に薄める 濃縮還元のめんつゆを使いますよね?
でもこれの計算 めんどくさくないですか?

だいたい 6倍に薄めるとして 使うつゆが 300mlだと
つゆ 42ml : 水 258ml

そこで・・・

濃縮還元のめんつゆ 2Lの水のペットボトルありますよね。
あれに あらかじめ 2L分 つくっておくと 便利です。
※腐らないように冷蔵庫保存と 長期保存は無理

2L分の 濃縮還元だと

つゆ 280ml : 水 1720ml です。

これで 2L分の つゆを 冷蔵庫に 常備保存。
なくなったら また2L分作れば 経済的で 便利


+1 テクニック

さて、ここで 事前につゆを作っておくと 腐りやすいのでは?衛生面大丈夫?という人向け

2Lの水のペットボトルを 買ってきます
ここから 280ml 計量カップに入れて 抜きます

そして 濃縮還元のつゆから 直接 このペットボトルの中に
ドバドバと 水位がもとにもどるまでつゆを入れてください。

その後 キャップをして よくふってください。

出したお水は のんじゃいましょう。

これで、余計なものにふれない 還元された つゆができます。
多少 衛生的です。

PHP password_hash 関数の 自作デモ (リアルタイムTweet)

パスワードの ハッシュ化(暗号化)の方法 PHP版

パスワードの ハッシュ化は 完璧ではありませんが
やっておくと、パスワードが流出した時の 簡単な防御策の1つになります。

※DBの構造も変わりますし、ソルトの添付なども含めると話は複雑になります。大変です。
詳しい話はリンク先を御覧ください。

手間暇をかければパスワードは解析されてしまいますが、
コードはとても簡単なので やっておいたほうがいい
セキュリティーの1つです。

1行程度でできるので、がんばってください。
入力は$_POST[“pass”]でパスワードが入力されるとします。

input:<?php echo $_POST["pass"] ;?>
md5:<?php echo md5 ($_POST["pass"]) ;?>
sha1 :<?php echo sha1 ($_POST["pass"]) ;?>
sha256 :<?php echo hash ( "sha256",$_POST["pass"]) ;?>

md5 は処理が早く サーバーの負荷がかるいですが、暗号化(ハッシュ化)は簡単にとけてしまいます。



sha256 は 暗号化は強い暗号化ですが、サーバー負荷が高いために、安いサーバーだと厳しいかもしれません。

実行した結果の サンプル画像

hash

もっと 詳しい ソルトなどを加えた 処理はこちら


ハッシュとソルト、ストレッチングを正しく理解する:本当は怖いパスワードの話 (2/4) - @IT
その他、辞書的攻撃など いろいろな防備が必要ですがそれはまた別のお話で
どうやっても完全なセキュリティーはありません。
今回の趣旨は、すごい技をひろうということではなく、
お粗末な技ではありますが、なにか、書かなければ、という事です。

参考文献

HTMLタグ/フォームタグ/入力フォームを作る – TAG index
HTMLタグ/フォームタグ/パスワード形式の入力欄を作る – TAG index
hash

Fizz Buzzであなたは何を見られているのか?

ごめんなさい。 ネタバレ には成ってしまうのですが・・・
若い子たちに教えないと、育たない。
これを教えてしまうと、自分で見つけるチャンスがなくなり
なんか 変なことに成ってしまうとは思います。

でも 最初の1歩目を ちゃんと踏み出せないと
間違った方向に行ってしまう子が増えちゃいます。

Fizz Buzz を 2つの書き方で書きました。

————- 続きを読む » ( Read More )————-