You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server Reporting中实现带加密文本的可跳转超链接

解决方案

问题定位

你当前报表表达式调用的是Code.Base64Encode,但实际需要调用自定义的CryptographyHelper.Encrypt方法,这是导致未达预期的核心原因。以下是完整的正确实现步骤:

步骤1:将CryptographyHelper添加到报表自定义代码

在报表设计器中操作:

  • 右键报表空白区域 → 选择报表属性
  • 切换到代码选项卡,把你的CryptographyHelper类代码完整粘贴到自定义代码区域
  • 注意:密钥不要硬编码,建议通过报表参数动态传入,提升安全性

步骤2:在报表列中调用加密方法

选中需要加密的列文本框,设置其表达式为:

=New Code.CryptographyHelper().Encrypt(Fields!CustomerNumber.Value & "|" & Fields!DocumentNumber.Value)

这会触发你实现的AES加密逻辑,生成包含随机IV的Base64格式加密字符串。

步骤3:设置点击跳转动作

  1. 选中该文本框 → 右键选择文本框属性
  2. 切换到操作选项卡,选择跳转到URL
  3. 在URL表达式中,把加密后的值作为参数传递到目标页面,示例:
="http://你的目标页面地址/detail?data=" & URLEncode(New Code.CryptographyHelper().Encrypt(Fields!CustomerNumber.Value & "|" & Fields!DocumentNumber.Value))

必须用URLEncode对加密后的Base64字符串编码,避免特殊字符破坏URL结构

解密端配套逻辑

目标页面接收加密参数后,需要对应实现解密:

  1. 先对URL参数做URL解码
  2. 将Base64字符串转字节数组,拆分出前16字节(AES-128的IV长度)和剩余加密数据
  3. 使用相同密钥、CBC模式、PKCS7填充方式解密

示例解密代码(VB.NET):

Public Function Decrypt(input As String, key As String) As String
    Dim inputBytes As Byte() = Convert.FromBase64String(input)
    Dim iv As Byte() = inputBytes.Take(16).ToArray()
    Dim encryptedBytes As Byte() = inputBytes.Skip(16).ToArray()
    
    Dim keyBytes As Byte() = Encoding.UTF8.GetBytes(key)
    Dim aes As Aes = Aes.Create()
    aes.Key = keyBytes
    aes.IV = iv
    aes.Mode = CipherMode.CBC
    aes.Padding = PaddingMode.PKCS7
    
    Dim decryptor As ICryptoTransform = aes.CreateDecryptor()
    Dim decryptedBytes As Byte() = decryptor.TransformFinalBlock(encryptedBytes, 0, encryptedBytes.Length)
    
    Return Encoding.UTF8.GetString(decryptedBytes)
End Function

安全提示

  • 禁止在报表代码中硬编码密钥,建议通过加密配置或权限验证后的接口获取
  • 确保加密、解密两端的算法参数(密钥长度、模式、填充)完全一致

内容的提问来源于stack exchange,提问作者Learner

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.13 08:28:09