asp.net mvc kendo ui grid 加密列数据

Posted

技术标签:

【中文标题】asp.net mvc kendo ui grid 加密列数据【英文标题】:asp.net mvc kendo ui grid encrypt column data 【发布时间】:2016-06-23 12:59:37 【问题描述】: var grid = $("#grid").kendoGrid( 数据源:数据源, 可分页:真, 身高:430, 工具栏:[“创建”], 列: [ “产品名称”, 字段:“身份证”, 标题:“产品编号”, 宽度:“100 像素” , 字段:“单价”, 标题:“单价”, 格式:“0:c”, 宽度:“100 像素” , 字段:“UnitsInStock”, 标题:“库存单位”, 宽度:“100 像素” , 字段:“停产”, 宽度:“100 像素” , 命令:[“编辑”,“销毁”], 标题: ” ”, 宽度:“172px” ], 可编辑:“内联” ).data("kendoGrid");

如何加密 kendo ui 网格上的列 Product ID 以使用户看不到我的真实 ID?我正在使用 ASP.NET MVC 5。

谢谢!

【问题讨论】:

【参考方案1】:

您可以将 kendo 网格客户端模板用于将 Id 值传递给 javascript 函数的列,而不是直接加密,使用您的算法对其进行加密,然后将其返回。 类似的东西。

columns.Bound(client => client.Id).ClientTemplate("#=Encrypt(Id)#");

 <script> 
function Encrypt(id)

// Logic to Encrypt ID
return encryptedID.toString();

</script>

如果这只是为了向用户展示,那么此解决方案有效

第二个解决方案是隐藏列(我的意思是没有向用户显示 ID)

如果你觉得这有帮助,请标记为答案

【讨论】:

【参考方案2】:

Enrcypt data before you load data in your code behind after that bind your data.

为了做到这一点,使用下面的 encrpyt 类

public class DataEncryptor

    TripleDESCryptoServiceProvider symm;

    #region Factory
    public DataEncryptor()
    
        this.symm = new TripleDESCryptoServiceProvider();
        this.symm.Padding = PaddingMode.PKCS7;
    
    public DataEncryptor(TripleDESCryptoServiceProvider keys)
    
        this.symm = keys;
    

    public DataEncryptor(byte[] key, byte[] iv)
    
        this.symm = new TripleDESCryptoServiceProvider();
        this.symm.Padding = PaddingMode.PKCS7;
        this.symm.Key = key;
        this.symm.IV = iv;
    

    #endregion

    #region Properties
    public TripleDESCryptoServiceProvider Algorithm
    
        get  return symm; 
        set  symm = value; 
    
    public byte[] Key
    
        get  return symm.Key; 
        set  symm.Key = value; 
    
    public byte[] IV
    
        get  return symm.IV; 
        set  symm.IV = value; 
    

    #endregion

    #region Crypto

    public byte[] Encrypt(byte[] data)  return Encrypt(data, data.Length); 
    public byte[] Encrypt(byte[] data, int length)
    
        try
        
            // Create a MemoryStream.
            var ms = new MemoryStream();

            // Create a CryptoStream using the MemoryStream 
            // and the passed key and initialization vector (IV).
            var cs = new CryptoStream(ms,
                symm.CreateEncryptor(symm.Key, symm.IV),
                CryptoStreamMode.Write);

            // Write the byte array to the crypto stream and flush it.
            cs.Write(data, 0, length);
            cs.FlushFinalBlock();

            // Get an array of bytes from the 
            // MemoryStream that holds the 
            // encrypted data.
            byte[] ret = ms.ToArray();

            // Close the streams.
            cs.Close();
            ms.Close();

            // Return the encrypted buffer.
            return ret;
        
        catch (CryptographicException ex)
        
            Console.WriteLine("A cryptographic error occured: 0", ex.Message);
        
        return null;
    

    public string EncryptString(string text)
    
        return Convert.ToBase64String(Encrypt(Encoding.UTF8.GetBytes(text)));
    

    public byte[] Decrypt(byte[] data)  return Decrypt(data, data.Length); 
    public byte[] Decrypt(byte[] data, int length)
    
        try
        
            // Create a new MemoryStream using the passed 
            // array of encrypted data.
            MemoryStream ms = new MemoryStream(data);

            // Create a CryptoStream using the MemoryStream 
            // and the passed key and initialization vector (IV).
            CryptoStream cs = new CryptoStream(ms,
                symm.CreateDecryptor(symm.Key, symm.IV),
                CryptoStreamMode.Read);

            // Create buffer to hold the decrypted data.
            byte[] result = new byte[length];

            // Read the decrypted data out of the crypto stream
            // and place it into the temporary buffer.
            cs.Read(result, 0, result.Length);
            return result;
        
        catch (CryptographicException ex)
        
            Console.WriteLine("A cryptographic error occured: 0", ex.Message);
        
        return null;
    

    public string DecryptString(string data)
    
        return Encoding.UTF8.GetString(Decrypt(Convert.FromBase64String(data))).TrimEnd('\0');
    

    #endregion


并像这样使用它:

string message="A very secret message here.";
DataEncryptor keys=new DataEncryptor();
string encr=keys.EncryptString(message);

// later
string actual=keys.DecryptString(encr);

【讨论】:

以上是关于asp.net mvc kendo ui grid 加密列数据的主要内容,如果未能解决你的问题,请参考以下文章

Telerik Kendo UI ASP.NET MVC Grid - 已保存数据项的事件处理

C#(ASP.NET) MVC kendo grid如何绑定一个数据库返回的datatable(要最简单的)

ASP.NET MVC - Kendo Grid 慢分页

在 ASP.NET MVC 上使用 Kendo Grid 更改数据

无法覆盖 Kendo Grid 过滤器消息 (ASP.NET MVC)

ASP.Net MVC Kendo Grid 的自定义分页