none
UWPで暗号化するには RRS feed

  • 質問

  • Univarsal Windows(Windows 10)C#で開発しています。

    AESで暗号化したいのですが

    ユニバーサルWindowsアプリの開発ではSystem.Security.Cryptographyが参照できず、AesManagedが使用できません。

    Windows.Security.Cryptographyを使うと、AesManagedや、javaのClipherを使う方法とは異なってしまいます。

    UWPで暗号化したら、別のアプリでjavaで復号したいので何か方法はないでしょうか?

    2017年1月12日 9:48

すべての返信

  • AesManagedもそうですが、ModeやPaddingを一致させないと暗号化・復号できません。逆に言えばこれらを一致させればWindows.Security.Cryptographyでも使えるはずです。
    2017年1月12日 13:06
  • Windows.Security.Cryptographyで使用する暗号化アルゴリズム(SymmetrickKeyAlgorithmProvider)は、対象キーを作成するだけで、実際に暗号化するCryptographicEngineはModeやPaddingを指定できないように見えます。

    2017年1月13日 0:43
  • SymmetricKeyAlgorithmProvider.OpenAlgorithmに渡すアルゴリズム文字列(SymmetricAlgorithmNamesクラスで定義されている)で指定できるようですが。

    // 利用できるモードは限られてるようだけど。

    モードはともかく、パディングはいざとなれば自分で埋めることが可能です。

    2017年1月13日 1:11
  • SymmetricKeyAlgorithmProviderには指定できます。

    しかしここで指定されたアルゴリズムは対象キーを作成する際に適用されるもので

    CryptographicEngineでEncryptする際には適用されないのではないかと思っているのですが

    どうなのでしょうか、、、

    2017年1月13日 4:27
  • 具体的なコードを提示してください。

    1. SymmetricKeyAlgorithmProvider.OpenAlgorithm()でSymmetricKeyAlgorithmProviderを作成する
    2. 1.を使用してSymmetricKeyAlgorithmProvider.CreateSymmetricKey()でCryptographicKeyを作成する
    3. 2.を使用してCryptographicEngine.Encrypt()で暗号化を行う

    の手順でしょうか? 2.で作成したCryptographicKeyにアルゴリズム情報が含まれていなければ3.は何のアルゴリズムで動作するのでしょうか? それともCryptographicKeyにはアルゴリズム情報だけ含まれていて、モードとパディングは削除されているとお考えでしょうか?

    2017年1月13日 5:26
  • その通りです。CryptographicEngine.Encryptが何のアルゴリズムで動作しているのかわからなくて、、、。

    すみません、ざっくりと手順通り書くと(※誤字があったら失礼します)

    IBuffer password = CryptographicBuffer.ConvertStringToBinary("パスワード",BinaryStringencoding.Utf8);

    IBuffer buffer = CryptographicBuffer.ConvertStringToBinary("暗号化文字列",BinaryStringencoding.Utf8);

    SymmetricKeyAlgorithmProvider algorithm = SymmetricKeyAlgorithmProvider.OpenAlgorithm(SymmetricAlgorithmNames.AesCb Pkcst)

    IBuffer iv = CryptographicBuffer.GenerateRandom(algorithm.BlockLength);

    CryptographicKey key = algorithm.CreateSymmetricKey(password);

    IBuffer rtn = CryptographicEngine.Encrypt(key,buffer,iv);

    こんな感じです。



    2017年1月13日 6:21