C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: C#でRC4の暗号化と複合化


(過去ログ 59 を表示中)

[トピック内 7 記事 (1 - 7 表示)]  << 0 >>

■33498 / inTopicNo.1)  C#でRC4の暗号化と複合化
  
□投稿者/ べん吉 (1回)-(2009/03/02(Mon) 20:15:08)
べん吉 さんの Web サイト

分類:[.NET 全般] 

お世話になります。
以前こちらにて、C++2003のLibをDLL化したいと質問し、
.NETのクラスを使用すれば可能と回答を頂きました。

下記URLの暗号化は、RC4での複合化と思っています。
http://www.trustss.co.jp/smnEncrypt010.html
※このサイトを参考に圧縮された文字列があり、それを回答したいと思ってます。

.NET Framework2.0を使用してクラスを作成しようとしております。
可能とお聞きして調べておりますが、うまく情報収集できておりません。

できればサンプルなどどこかにあれば教えて頂けないでしょうか。

宜しくお願いします。

[開発言語]C# (VS2008)
[実行環境].NET Framework 2.0


引用返信 編集キー/
■33501 / inTopicNo.2)  Re[1]: C#でRC4の暗号化と複合化
□投稿者/ れい (835回)-(2009/03/02(Mon) 20:46:54)
No33498 (べん吉 さん) に返信
> .NET Framework2.0を使用してクラスを作成しようとしております。
> 可能とお聞きして調べておりますが、うまく情報収集できておりません。

RC4を実装するだけなら、
普通にそのまま実装すればいいだけなのでそれほど難しいことはありません。

> できればサンプルなどどこかにあれば教えて頂けないでしょうか。

誰かが実装したコードもネット上にあふれています。
たとえば「C# RC4」で検索するとすぐにこんなのが見つかりました。

http://www.codeproject.com/KB/recipes/rc4csharp.aspx
http://sourceforge.net/projects/rc4dotnet

用途に合ったのを選べばよいかと思います。
引用返信 編集キー/
■33516 / inTopicNo.3)  Re[2]: C#でRC4の暗号化と複合化
□投稿者/ べん吉 (2回)-(2009/03/03(Tue) 09:27:02)
べん吉 さんの Web サイト
ありがとうございます。


> 誰かが実装したコードもネット上にあふれています。
> たとえば「C# RC4」で検索するとすぐにこんなのが見つかりました。
>
> http://www.codeproject.com/KB/recipes/rc4csharp.aspx
> http://sourceforge.net/projects/rc4dotnet

1点目を試しましたが、暗号化してそのまま複合化しても元通りに戻りませんでした。
似ている文字列には戻されたのですが・・・
2点目はサンプルがエラーとなってしまいました。

元のソースがあり、いろいろ暗号化/複合化を繰り返しておりますが、
同じような結果になるものがありませんでした・・・
内部のキーも同じものを使ってはいます。

宜しくお願いします。

引用返信 編集キー/
■33523 / inTopicNo.4)  Re[3]: C#でRC4の暗号化と複合化
□投稿者/ 太郎冠者 (11回)-(2009/03/03(Tue) 12:36:24)
No33516 (べん吉 さん) に返信
> 宜しくお願いします。

何を??
エラーが出たなら詳細も載せてくださいな

#復号化→復号 なんてツッコミはもう古いのかしら
引用返信 編集キー/
■33524 / inTopicNo.5)  Re[4]: C#でRC4の暗号化と複合化
□投稿者/ べん吉 (3回)-(2009/03/03(Tue) 12:57:26)
べん吉 さんの Web サイト
No33523 (太郎冠者 さん) に返信
> ■No33516 (べん吉 さん) に返信
>>宜しくお願いします。
>
> 何を??
> エラーが出たなら詳細も載せてくださいな

ありがとうございます。

ソースを、下記のとおり変更する事でエラーが無くなり、
暗号化→複合ができるようになりました。

// static public long m_nBoxLen = 255;
static public long m_nBoxLen = 128;

ただ、こちらで期待している値と違う結果が返されます。
元のプログラムから、RC4暗号化と思っておりましたが、
間違っているのか調べています。

元ソース(C++2003)では下記の手順で処理しています。
------------------------------------------------------------------
#define PASSWORD "1234567890abcdef"
#define KEYLENGTH_128 0x0080 * 0x10000 // 128-bit
#define BYTELENGTH 128

// キーコンテナーの取得
CryptAcquireContext(&hProv,NULL,MS_ENHANCED_PROV,PROV_RSA_FULL,0);
// ハッシュ計算のインスタンス生成
CryptCreateHash(hProv,CALG_SHA,0,0,&hHash);
// ハッシュデータ生成
CryptHashData(hHash,(BYTE*)PASSWORD,(DWORD)strlen(PASSWORD),0);
// 鍵の生成
CryptDeriveKey(hProv,CALG_RC4,hHash,KEYLENGTH_128,&hKey);

// 暗号化
CryptEncrypt(hKey,0,TRUE,0,pbData,&dwDataLen,BYTELENGTH);

// 複合
CryptDecrypt(hKey,0,TRUE,0,pbData,&dwDataLen);
------------------------------------------------------------------

根本的にRC4でないなど、そのような問題でしょうか?

申し訳ありませんが、宜しくお願いします。

引用返信 編集キー/
■33554 / inTopicNo.6)  Re[5]: C#でRC4の暗号化と複合化
□投稿者/ べん吉 (1回)-(2009/03/04(Wed) 00:57:17)
RC4と書いておりましたが、引数にあるPROV_RSA_FULLから判断しました。
http://www015.upp.so-net.ne.jp/HMMN/CryptoAPI/Crypto_Encrypt_detail.html

ただ、参考にされたと思われる(http://www.trustss.co.jp/smnEasyEnc1E0.html)
にはAESと書かれています。

どちらが正しいか判断できますでしょうか。
C#アプリの結果と、参考URLの結果が同じになるようにしたいと思っています。

ご教授をお願い致します。

引用返信 編集キー/
■33560 / inTopicNo.7)  Re[5]: C#でRC4の暗号化と複合化
□投稿者/ れい (836回)-(2009/03/04(Wed) 13:26:40)
No33524 (べん吉 さん) に返信
> 根本的にRC4でないなど、そのような問題でしょうか?

示されたリンク先はざっと眺めた程度ですが、
何をしているのかよく読んだほうが良いと思います。

リンク先やべん吉さんの示したコードはRC4で暗号化するだけのコードではありません。
パスワードからハッシュを求め、そのハッシュから鍵を生成し、
その鍵で暗号化を行っています。

一方、普通に「RC4で暗号/復号」というと、
鍵を用いて平文/暗号文変換を行う部分のみを指します。

パスワード・ハッシュ・鍵の違いを意識してリンク先を読むと
何が問題なのかわかると思います。

以下蛇足ですが。

.NetのクラスライブラリにはSHAアルゴリズムは入っています。
それを利用してもいいですし、自分で実装しても大して手間ではありません。
もちろん、CryptoXXXなどのCryptAPIをPInvokeで呼び出しても作れます。

クラスとしたいのであれば、
内部でCryptoAPIを呼び出すような、ICryptoTransformを実装したRC4Transformクラスを作り、
そのキーにパスワードをSHAでハッシュしたバイト列を与えてやるような実装にすると
他のクラスとの整合性が取れていてよいと思います。

CryptoAPIを使う場合、
Cryptographic Service Providerがインストールされていなかったり、
いくつかのバージョンで問題があったりと、環境依存になる場合もあります。
RC4の場合はCSPとしてMicrosoft Enhanced Cryptographic Providerを使わないと制限が多くて困ると思いますが、
たまにこれが使えない環境があるようですのでご注意を。

#.Netが動き、最新のパッチのあたったPCなら大抵の場合は問題ないと思いますが。

引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -