1

Java での xml シリアライゼーションに問題があります。実際には、暗号化プログラムに次のような xml ヘッダーを作成する必要があります。

<EncryptedFileHeader>
    <Algorithm>algorithm name</Algorithm>
    <KeySize>key size</KeySize>
    <BlockSize>block size</BlockSize>
    <CipherMode>mode</CipherMode>
    <IV>initial vector</IV>
    <ApprovedUsers>
        <User>
            <Email>mail</Email>
            <SessionKey>session key</SessionKey>
        </User>
    </ApprovedUsers>
</EncryptedFileHeade>
*ciphered data*

暗号化されたデータがヘッダーの外にある場所。xml Bean を検討しましたが、次のようなノード プロパティや属性などの多くのオーバーヘッド データが得られます。

<void property="approvedUsers">
  <void index="0">

JAXB は非常に優れたノード ルックアウトを提供しますが、渡すデータはすべて Base64 に変換されます。これが最大の問題です。「暗号化されたデータ」と「セッション キー」は、純粋なバイナリ形式 (バイト []) で格納する必要があります。私はxml Beanを使用していますが、次のように保存されています:

<array class="byte" length="428704">
   <void index="0">
 <byte>43</byte>
</void>
<void index="1">
 <byte>93</byte>
</void>
<void index="2">
 <byte>76</byte>
</void>
<void index="3">
 <byte>48</byte>
</void>
<void index="4">
...

別の方法は、高速な情報セットを備えた JAXB です..しかし、この問題に対する別の簡単な解決策があるかどうか疑問に思っています。

編集:ここで私の問題/誤解の説明を見つけましたここにリンクの説明を入力してください

4

3 に答える 3

1

JAXB (JSR-222) 実装を使用すると、デフォルトの表現が十分でない場合、任意の表現XmlAdapterに a を変換するan を書くことができます。byte[]

public class ByteArrayAdapter extends XmlAdapter<String, byte[]> {
    ...
}
于 2013-05-07T18:20:30.747 に答える
0

この問題の解決策は、1 つのストリームのヘッダーを jaxb でシリアル化し、これを閉じることでした。そして次のストリームでは、別のストリームで既存のヘッダーにシリアル化します。これをデシリアライズするには、これをテキスト ストリームとして読み取り、正規表現を使用して最初の末尾 "" を見つけ、オブジェクトとしてアンマーシャリングします。これのサイズを確認し、ヘッダーをスキップして、このファイルを別のストリームで読み取り、暗号化されたデータを逆シリアル化します。

于 2013-10-03T14:35:11.710 に答える