Next Page

1

Previous Page

Thread: 値の暗号化について

Created on: 06/24/11 01:00 PM

Replies: 8

suu


常連


Joined: 08/19/09

Posts: 66

値の暗号化について
06/24/11 1:00 PM

xxxクエリーで取り出したフィールドネーム"id"を、cfform内で<cfoutput query=゙xxx゙>として存在するだけのidをcheckboxのvalue属性に当てはめて、
チェックされる分だけのidを暗号化して","区切りのリストとして次のアクションページへ送り、それを複合化したく、現在以下を記述していますが、カンマ区切りリストとして送られてくる値の複合化の方法がわかりません。

<cfform action=゙nextpg゙>

<cfset thekey=generatesecretkey("DESDE")>
<cfinput type=゙hidden゙ name=゙key゙ value=゙#thekey#゙>

<cfoutput query=゙xxx゙>
<cfset encrypted=#encrypt(id,thekey,"DESDE")#>
<cfinput type=゙checkbox゙ name゙id゙ value=゙#encrypted#゙>
</cfoutput>

<cfinput type=゙submit゙ value゙送信゙>
</cfform>

もしくは、選択される値をカンマ区切りのまま、まとめて暗号化してアクションページに渡して、まとめて複合化する方法でもいいのですが、その方法もわかりません。

どうかおわかりになる方いらっしゃいましたら
ご教授いただければ幸いです。

どうぞよろしくお願いします。

Link | Top | Bottom

hidek


半人前


Joined: 12/14/10

Posts: 22

RE: 値の暗号化について
06/28/11 1:52 PM

お世話様です。

Encrypt関数で暗号化したデータの複合化はDecrypt関数で複合できると思いますが、
意味をはきちがえておりましたらすみません。

hidek

Link | Top | Bottom

AXL


長老


Joined: 02/02/08

Posts: 246

RE: 値の暗号化について
06/28/11 4:04 PM

チェックボックスの値一つ一つを暗号化しているので、同様に、複合化するには送り先で暗号化されたものを一つ一つ取り出して複合化してあげないと元には戻りませんよ。

Link | Top | Bottom

suu


常連


Joined: 08/19/09

Posts: 66

RE: 値の暗号化について
06/29/11 8:10 AM

Hidek様、AXL様いつもありがとうございます。

<cfif isdefined("FORM.id") AND isdefined("FORM.key")>
<cfloop index="enc_id" list="#FORM.id#">
<cfset decrypted=#decrypt(FORM.id,FORM.key,"DESEDE")#>
</cfloop>
</cfif>

上記コードをアクションページに記述しています。
フォームページでidのチェックボックスを二つ以上選択して送信しても、上記
decrypted変数を確認すると、一つの復号化されたidしか存在しません。

二つ以上選択した、暗号化されたidリストをアクションページで復号化するにはどうすればよいでしょうか?
初歩的な質問またはミスで申し訳ないですが、どうかよろしくお願いします。

Link | Top | Bottom

AXL


長老


Joined: 02/02/08

Posts: 246

RE: 値の暗号化について
06/29/11 11:58 AM

<cfset decrypted=#decrypt(FORM.id,FORM.key,"DESEDE")#> のところは、
<cfset decrypted=#decrypt(enc_id,FORM.key,"DESEDE")#> です。

注意してほしいのは、暗号化された値はもちろんカンマなどの記号も含まれてくるので、ただ単にカンマ区切りで取り出せるものではないので、その辺の対処も必要ですよ。
* Last updated by: AXL on 6/29/2011 @ 12:03 PM *

Link | Top | Bottom

suu


常連


Joined: 08/19/09

Posts: 66

RE: 値の暗号化について
06/30/11 8:07 AM

AXL様いつも適切なアドバイスをいただきありがとうございます!

当初はご指摘頂いた方法で記述していたのですが、
「入力 string を暗号化または復号する際に、エラーが発生しました : 入力エンコードと出力エンコードが異なっています。。」
というエラーが出たので変更しました。

ご指摘いただきました通りに、暗号化すると変数自体にカンマが含まれる時もあるので、複数のid選択時は、一つの変数として区切る部分が本来と違うところで区切られる場合があるので、エラーがでる時と出ない時があると思うのですが、それを回避する方法がわかりません。。。

どうか良い方法がありましたら教えていただけないでしょうか?
よろしくお願いします。

Link | Top | Bottom

AXL


長老


Joined: 02/02/08

Posts: 246

RE: 値の暗号化について
06/30/11 12:18 PM

フォームによる区切り文字(カンマ)を変えることはできないので、何かユニークな文字列を作ってあげてそれを値に付けて、送り先でそれを区切り文字として処理してあげれば希望通りにできますよ。

忘れてはいけないのは、フォームによって追加されるカンマの処理と今のままのコードでは文字列(1文字以上)を区切り文字としては扱えないことです。
ヒントはlist関数の内のひとつを使えば文字列を区切り文字として扱えるようになります。

Link | Top | Bottom

suu


常連


Joined: 08/19/09

Posts: 66

RE: 値の暗号化について
07/01/11 8:04 AM

AXL様ありがとうございます。

アドバイスいただいてからいろいろ試してみたのですが、同じエラーがでて上手くいきません。

以下は最後に試したコードです。

フォームページに以下を追加
<cfset encrypted=#encrypt(id,theKey,"DESEDE")#>
<cfset k_enc="#encrypted#kugiri">
<cfinput type="checkbox" name="id" value="#k_enc#">

アクションページに以下を追加
<cfset delmt=ListChangeDelims(FORM.id,"kugiri","kugiri,")>
<cfloop index="enc_id" list="#delmt#" delimiters="kugiri">
<cfset decrypted=#decrypt(enc_id,FORM.key,"DESEDE")#>
</cfloop>

どうかよろしくお願いいたします。

Link | Top | Bottom

AXL


長老


Joined: 02/02/08

Posts: 246

RE: 値の暗号化について
07/01/11 10:36 AM

ListChangeDelims を選んだのは間違いです。
それと cfloop で list を使うと文字列(1文字以上)を区切り文字としては扱えません。

ラインごとにどうプログラムが動いているのかはっきり理解されていないようなので、ただ答えだけを載せてしまうとそれを理解しないまま終わってしまいそうなので、
ちょっと厳しいかもしれませんが、ご理解のほどを。

あと区切り文字はユニークなものでないと、万が一Encrypt関数で同じ文字列が作られてしまうとまた同じことになってしまうので気をつけてください。

Link | Top | Bottom

Next Page

1

Previous Page

New Post

Please login to post a response.