2009年2月19日木曜日

[他]PDFで指定ページをひらく(Web)

WEB系のシステムでPDFの特定ページを開きたい場合、GETの引数を指定することによりページを開くことができるようです。コレをPDF Open Parameterというらしいです。
詳細は英語なのでアレですがPDFOpenParametersに詳細があります。たとえば3ページ目を開く場合、以下のようなパラメータを記載することで実現できるようです。

http://example.org/doc.pdf#page=3

[他]リファレンス(VBS,TSQL,ASP)

毎回、「ブックマークしてねぇー」といって探すリファレンスの部類です。備忘録としてメモ。

でも、URLが結構変わっちゃうんですよねぇ。

2009年2月13日金曜日

[.NET]エンコード後のバイト列の取得

今まではEncoding.GetBytes()を使っていったバイト列に落としていましたが、GetByteCountなるメソッドを今日発見しました!。備忘録としてメモ。コードはこんな感じ。

string text = "1192つくろう鎌倉幕府!!";
// バイト列にしたばあいの文字数が取れる
int byteLen = Encoding.UTF8.GetByteCount(text);

System.Diagnostics.Debug.WriteLine("文字数[" + text.Length + "] バイト数[" + byteLen + "]");


■実行結果
文字数[14] バイト数[34]

2009年2月10日火曜日

[他]オブジェクトブラウザ

先日、WSHでとあるActiveXの動作を確認しようと思ったのですが、資料も何も無く途方にくれていました。
で、とりあえずActiveXのクラス?からインタフェースを見ることのできる、オブジェクトブラウザを思い出しました。

しかし、エディタとOfficeくらいしか入っていないマシンのため、開発ツールは何もありません。
VBやVisual Studioなどの開発環境をインストールしていないとオブジェクトブラウザは。。。と思っていたら、ExcelなどのVBAの動作する環境についている。という情報があり、ExcelのVBA環境を見てみると、オブジェクトブラウザの起動ボタンがありました。

起動すると、該当のActiveXのメソッドやプロパティを見ることができました。
そのおかげで、どのようなインタフェースがあるのかということがわかり、ソレらしくプロパティを設定してやると動作しました。

いやー思い込みのせいで、わかりませんと回答するところでしたが、結果が出せてほっとしました。

2009年2月3日火曜日

[他]VS2008へのアップグレード

今日、何気にメールを見ていると、VS2008Proへのアップグレードパッケージのニュースがありました。

何が気になるかというと、このアップグレードの対象に「Visual.NET Version 2002, 2003/Visual C# 2005, 2008 (2005, 2008 Express Edition を含む) 」と記載があることです。

    Express Edition?

Express Editionって無料で使えるアレ(えぇまぁ私も使っています)ですよね?つまるところExpress Editionユーザ登録さえすれば通常パッケージの半額程度でVS2008Proが入手できることになります(要確認)。

とはいえ、市販価格で5万円くらい。。。私にはExpress Editionがお似合いです。

2009年1月27日火曜日

[.NET]文字列の暗号化(DPAPI)

「暗号化する=暗号用キーが必要」というのがあり、システム構築の上で、この鍵をどこに保存するかという問題が発生します。コレを解決したのがDPAPI(データ保護 API)です。Windows 2000以降のOSで利用できるようです。

3DESやAESのように暗号用のキー情報を保持する必要はありませんが、故障などでマシンが死亡すると復旧できません。 コードはこんなかんじ。

(ボタン押下の処理です。txtHashはTextBox。共通処理は3DESと同じ)
/// <summary>
/// DPAPIで暗号化
/// </summary>
/// <remarks>system.security.dllが必要</remarks>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDPC_Click(object sender, EventArgs e)
{
    //対象を16進バイト列化
    byte[] data = Encoding.UTF8.GetBytes(txtOriginal.Text);
    //バイト列を暗号化
    byte[] encData = ProtectedData.Protect(data
                                , entropy   //暗号用追加バイト列
                                , DataProtectionScope.LocalMachine);//暗号化スコープ(マシン範囲)
    //16進数文字列に変換
    txtHash.Text = byte2HexString(encData);

}

/// <summary>
/// DPAPI複合化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnDPD_Click(object sender, EventArgs e)
{
    //対象を16進バイト列化
    byte[] data = hexString2Byte(txtHash.Text);
    //バイト列を複合化
    byte[] decData = ProtectedData.Unprotect(data 
                                , entropy   //暗号用追加バイト列
                                , DataProtectionScope.LocalMachine);//暗号化スコープ(マシン範囲)
    // 複合化されたデータを取得
    string code = Encoding.UTF8.GetString(decData);
    txtRestre.Text = code;

}

2009年1月25日日曜日

[.NET]文字列の暗号化(RSA)

標準的な暗号化方式の1つに公開鍵暗号があります。
コードはこんなかんじ。このサンプルでは、動的に公開鍵と秘密鍵を生成しています。

(ボタン押下の処理です。txtOriginalとtxtHashはTextBox。共通処理は3DESと同じ)
//公開鍵をXML形式で取得
private string publicKey = string.Empty;
//秘密鍵をXML形式で取得
private string privateKey = string.Empty;

/// <summary>
/// RSAで暗号化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRSAC_Click(object sender, EventArgs e)
{
    //対象を16進バイト列化
    byte[] data = Encoding.UTF8.GetBytes(txtOriginal.Text);

    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {

        //公開鍵・秘密鍵をこのタイミングで生成する
        publicKey = rsa.ToXmlString(false);
        privateKey = rsa.ToXmlString(true);

        //公開鍵を指定
        rsa.FromXmlString(publicKey);

        //バイト列を暗号化
        byte[] encData = rsa.Encrypt(data, true);
        //16進数文字列に変換
        txtHash.Text = byte2HexString(encData);
    }
}

/// <summary>
/// RSAで複合化
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnRSAD_Click(object sender, EventArgs e)
{
    byte[] data = hexString2Byte(txtHash.Text);
    using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
    {

        //秘密鍵を指定
        rsa.FromXmlString(privateKey);

        //バイト列を複合化
        byte[] decData = rsa.Decrypt(data, true);
        // 複合化されたデータを取得
        string code = Encoding.UTF8.GetString(decData);
        txtRestre.Text = code;
    }
}