WEB系のシステムでPDFの特定ページを開きたい場合、GETの引数を指定することによりページを開くことができるようです。コレをPDF Open Parameterというらしいです。
詳細は英語なのでアレですがPDFOpenParametersに詳細があります。たとえば3ページ目を開く場合、以下のようなパラメータを記載することで実現できるようです。
http://example.org/doc.pdf#page=3
GDDとは「Gut's Driven Development」の略です。簡単にいうとガッツ駆動方式のシステム開発です。
えぇまぁ、私の開発スタイルです。このBlogでは、そんなシステム開発の作業で発見したことを記録していきます。
バイク関連の記事もちょいちょい書き出しました。皆さんの参考になると幸いです。
(Google Developer Daysとか、Game Design Documentとはなんの関係ありません。)
2009年2月19日木曜日
2009年2月13日金曜日
[.NET]エンコード後のバイト列の取得
今まではEncoding.GetBytes()を使っていったバイト列に落としていましたが、GetByteCountなるメソッドを今日発見しました!。備忘録としてメモ。コードはこんな感じ。
■実行結果
string text = "1192つくろう鎌倉幕府!!";
// バイト列にしたばあいの文字数が取れる
int byteLen = Encoding.UTF8.GetByteCount(text);
System.Diagnostics.Debug.WriteLine("文字数[" + text.Length + "] バイト数[" + byteLen + "]");
// バイト列にしたばあいの文字数が取れる
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のメソッドやプロパティを見ることができました。
そのおかげで、どのようなインタフェースがあるのかということがわかり、ソレらしくプロパティを設定してやると動作しました。
いやー思い込みのせいで、わかりませんと回答するところでしたが、結果が出せてほっとしました。
で、とりあえず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がお似合いです。
何が気になるかというと、このアップグレードの対象に「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と同じ)
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;
}
/// 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と同じ)
コードはこんなかんじ。このサンプルでは、動的に公開鍵と秘密鍵を生成しています。
(ボタン押下の処理です。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;
}
}
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;
}
}
登録:
投稿 (Atom)