/// <summary> /// CryptProtectDataでデータを暗号化します。 /// </summary> /// <param name="unencryptedData">処理対象のデータ</param> /// <returns>暗号化されたデータ</returns> public static byte[] CryptProtectedData(byte[] unencryptedData) { //リソース確保 var input = new Win32Api.DATA_BLOB(); var output = new Win32Api.DATA_BLOB(); try { input.pbData = Marshal.AllocHGlobal(unencryptedData.Length); input.cbData = (uint)unencryptedData.Length; Marshal.Copy(unencryptedData, 0, input.pbData, unencryptedData.Length); //復号化 var dammy = new Win32Api.DATA_BLOB(); var isSucc = Win32Api.CryptProtectData(ref input, null, ref dammy, IntPtr.Zero, IntPtr.Zero, 0, ref output); Trace.Assert(isSucc, "SnkLib.App.CookieGetter: error", "CryptProtectedData()でエラーが発生しました。データ暗号化で予期せぬ失敗が発生しています。"); if (isSucc == false) { return(null); } //リソース解放 var cryptedBytes = new byte[output.cbData]; Marshal.Copy(output.pbData, cryptedBytes, 0, (int)output.cbData); return(cryptedBytes); } catch (DllNotFoundException e) { Trace.TraceError("SnkLib.App.CookieGetter.dll:\r\n" + "CryptProtectedData()でエラーが発生しました。Win32API呼び出しで対象のdllが存在しませんでした。\r\n" + e.ToString()); return(null); } catch (EntryPointNotFoundException e) { Trace.TraceError("SnkLib.App.CookieGetter.dll:\r\n" + "CryptProtectedData()でエラーが発生しました。Win32API呼び出しで対象のエントリーポイントが存在しませんでした。\r\n" + e.ToString()); return(null); } finally { if (input.pbData != null) { Marshal.FreeHGlobal(input.pbData); } if (output.pbData != null) { Marshal.FreeHGlobal(output.pbData); } } }
/// <summary> /// CryptProtectDataでデータを暗号化します。 /// </summary> /// <param name="unencryptedData">処理対象のデータ</param> /// <returns>暗号化されたデータ</returns> public static byte[] CryptProtectedData(byte[] unencryptedData) { //リソース確保 var input = new Win32Api.DATA_BLOB(); var output = new Win32Api.DATA_BLOB(); try { input.pbData = Marshal.AllocHGlobal(unencryptedData.Length); input.cbData = (uint)unencryptedData.Length; Marshal.Copy(unencryptedData, 0, input.pbData, unencryptedData.Length); //復号化 var dammy = new Win32Api.DATA_BLOB(); var isSucc = Win32Api.CryptProtectData(ref input, null, ref dammy, IntPtr.Zero, IntPtr.Zero, 0, ref output); Trace.Assert(isSucc, "SnkLib.App.CookieGetter: error", "CryptProtectedData()でエラーが発生しました。データ暗号化で予期せぬ失敗が発生しています。"); if (isSucc == false) return null; //リソース解放 var cryptedBytes = new byte[output.cbData]; Marshal.Copy(output.pbData, cryptedBytes, 0, (int)output.cbData); return cryptedBytes; } catch (DllNotFoundException e) { Trace.TraceError("SnkLib.App.CookieGetter.dll:\r\n" + "CryptProtectedData()でエラーが発生しました。Win32API呼び出しで対象のdllが存在しませんでした。\r\n" + e.ToString()); return null; } finally { if (input.pbData != null) Marshal.FreeHGlobal(input.pbData); if (output.pbData != null) Marshal.FreeHGlobal(output.pbData); } }