C#中利用DPAPI加密解密数据

加密解密的一个函数

 

using  System;
using  System.Runtime.InteropServices;
using  System.Text;
using  System.Security;

namespace  CryptProtection
{
    [Serializable()]
    
public sealed class DataProtection
    
{
        [Flags()]
        
public enum CryptProtectPromptFlags
        
{
            CRYPTPROTECT_PROMPT_ON_UNPROTECT 
= 0x01,
            CRYPTPROTECT_PROMPT_ON_PROTECT 
= 0x02,
            CRYPTPROTECT_PROMPT_RESERVED 
= 0x04,
            CRYPTPROTECT_PROMPT_STRONG 
= 0x08,
            CRYPTPROTECT_PROMPT_REQUIRE_STRONG 
= 0x10
        }


        [Flags()]
        
public enum CryptProtectDataFlags
        
{
            CRYPTPROTECT_UI_FORBIDDEN 
= 0x01,
            CRYPTPROTECT_LOCAL_MACHINE 
= 0x04,
            CRYPTPROTECT_CRED_SYNC 
= 0x08,
            CRYPTPROTECT_AUDIT 
= 0x10,
            CRYPTPROTECT_NO_RECOVERY 
= 0x20,
            CRYPTPROTECT_VERIFY_PROTECTION 
= 0x40,
            CRYPTPROTECT_CRED_REGENERATE 
= 0x80
        }


        
加密数据


        
解密数据

        
internal static void InitPromptstruct(ref DPAPI.CRYPTPROTECT_PROMPTSTRUCT ps)
        
{
            ps.cbSize 
= Marshal.SizeOf(typeof(DPAPI.CRYPTPROTECT_PROMPTSTRUCT));
            ps.dwPromptFlags 
= 0;
            ps.hwndApp 
= IntPtr.Zero;
            ps.szPrompt 
= null;
        }

    }


    
//允许托管代码不经过堆栈步即调入非托管代码
    [SuppressUnmanagedCodeSecurityAttribute()]
    
internal class DPAPI
    
{
        [DllImport(
"crypt32")]
        
public static extern bool CryptProtectData(ref DATA_BLOB dataIn, string szDataDescr, IntPtr optionalEntropy, IntPtr pvReserved,
            IntPtr pPromptStruct, DataProtection.CryptProtectDataFlags dwFlags, 
ref DATA_BLOB pDataOut);

        [DllImport(
"crypt32")]
        
public static extern bool CryptUnprotectData(ref DATA_BLOB dataIn, StringBuilder ppszDataDescr, IntPtr optionalEntropy,
            IntPtr pvReserved, IntPtr pPromptStruct, DataProtection.CryptProtectDataFlags dwFlags, 
ref DATA_BLOB pDataOut);

        [DllImport(
"Kernel32.dll")]
        
public static extern IntPtr LocalFree(IntPtr hMem);

        [StructLayout(LayoutKind.Sequential)]
            
public struct DATA_BLOB
        
{
            
public int cbData;
            
public IntPtr pbData;
        }


        [StructLayout(LayoutKind.Sequential)]
            
public struct CRYPTPROTECT_PROMPTSTRUCT
        
{
            
public int cbSize; // = Marshal.SizeOf(typeof(CRYPTPROTECT_PROMPTSTRUCT))
            public int dwPromptFlags; // = 0
            public IntPtr hwndApp; // = IntPtr.Zero
            public string szPrompt; // = null
        }

    }



    
internal class Win32Error
    
{
        [Flags()]
            
public enum FormatMessageFlags : int
        
{
            FORMAT_MESSAGE_ALLOCATE_BUFFER 
= 0x0100,
            FORMAT_MESSAGE_IGNORE_INSERTS 
= 0x0200,
            FORMAT_MESSAGE_FROM_STRING 
= 0x0400,
            FORMAT_MESSAGE_FROM_HMODULE 
= 0x0800,
            FORMAT_MESSAGE_FROM_SYSTEM 
= 0x1000,
            FORMAT_MESSAGE_ARGUMENT_ARRAY 
= 0x2000,
            FORMAT_MESSAGE_MAX_WIDTH_MASK 
= 0xFF,
        }


        [DllImport(
"Kernel32.dll")]
        
public static extern int FormatMessage(FormatMessageFlags flags, IntPtr source, int messageId, int languageId , 
            StringBuilder buffer, 
int size, IntPtr arguments);
    }

}

 
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值