gpt4 book ai didi

javascript - 来自 JSON 的 ColdFusion 加密 ID

转载 作者:行者123 更新时间:2023-12-01 00:36:18 25 4
gpt4 key购买 nike

全部,

我正在绞尽脑汁想弄清楚如何使用 ColdFusion 拦截和加密来自 JSON 请求的数据库记录 ID。下面包括我的代码,以及我很抱歉的尝试。任何帮助都会很棒。

<cfquery name="GetAppData" datasource="MYSQLSTUFF">
SELECT *
From MYDATATABLE
</cfquery>
<cfset myKey = "VpugAocKZVP8BZzamx52Yw=="/>
<cfset data = [] />
<cfoutput query="GetAppData">
<cfset EID = #EMPLOYEE_ID#/>
<cfset EMPLOYEE_ID = #Encrypt(EID,myKey,'AES/CBC/PKCS5Padding','HEX')#/>
<cfset obj = {
"EMPLOYEE_ID" = EMPLOYEE_ID,
"LAST_NAME" = LAST_NAME,
"FIRST_NAME" = FIRST_NAME,
"EVER_NUM" = EVER_NUM,
"SortOrderDate" = SortOrderDate,
"DOCS_VER" = DOCS_VER,
"DOCS_WAIT" = DOCS_WAIT,
"APP_STATUS" = APP_STATUS,
"LOCATION_NAME" = LOCATION_NAME
} />
<cfset arrayAppend(data, obj) />
</cfoutput>


<cfprocessingdirective suppresswhitespace="Yes">
<cfoutput>
{"data":
#serializeJSON(data)#
}
</cfoutput>
</cfprocessingdirective>

<cfsetting enablecfoutputonly="No" showdebugoutput="No">

我正在尝试使用这个加密的 ID 来链接到另一个显示员工 ID 详细信息的页面。

最佳答案

TLDR;

再看看my sample code on your other question .这是由不正确的范围界定引起的。解决方案是正确确定所有变量的范围(或使用不属于查询列名称之一的变量名称)。

<!--- use query scope to overwrite query column value --->
<cfset queryName.columnName[queryName.currentRow] = Encrypt(...)>

<!--- OR use "variables" scope to reference new variable --->
<cfset variables.EMPLOYEE_ID = Encrypt(...)>
...
<cfset obj = {
"EMPLOYEE_ID" = variables.EMPLOYEE_ID,
....
} />

解释

当您分配一个没有作用域的变量时,它被放置在默认作用域 VARIABLES 中。所以这段代码并没有覆盖查询列的值,而是在 VARIABLES 范围内创建了一个全新的变量。

<cfset EMPLOYEE_ID = Encrypt(EID,sampleKey,'AES/CBC/PKCS5Padding','HEX')/>

...就像你要写这个一样:

<cfset variables.EMPLOYEE_ID = Encrypt(EID,sampleKey,'AES/CBC/PKCS5Padding','HEX')/>

无意中创建了两个“EMPLOYEE_ID”变量,在尝试读取此处的值时造成歧义:

<cfset obj = {
"EMPLOYEE_ID" = EMPLOYEE_ID,
....
} />

因为 EMPLOYEE_ID 没有作用域,CF 必须猜测您想要的两个变量中的哪一个 - 查询中的那个或 VARIABLES 作用域。然后 CF 在各种范围内搜索 EMPLOYEE_ID:

If you use a variable name without a scope prefix, ColdFusion checks the scopes in the following order to find the variable:

  1. Local (function-local, UDFs and CFCs only)
  2. Arguments
  3. Thread local (inside threads only)
  4. Query (not a true scope; variables in query loops)
  5. Thread
  6. Variables
  7. CGI
  8. ... etc...

然后 returns the one with the highest precedence .因为您处于查询循环内,所以“查询”范围具有更高的优先级。这就是为什么你得到的是原始的未加密值,而不是加密值。

<!--- simulate query data --->
<cfset myKey = "VpugAocKZVP8BZzamx52Yw=="/>

<cfset GetAppData = queryNew("EMPLOYEE_ID","integer", [ {EMPLOYEE_ID=1}])>

<cfoutput query="GetAppData">
<cfset EMPLOYEE_ID = Encrypt(EMPLOYEE_ID,myKey,'AES/CBC/PKCS5Padding','HEX')/>

(Unscoped) EMPLOYEE_ID = #EMPLOYEE_ID#<br>
(Scoped) variables.EMPLOYEE_ID = #variables.EMPLOYEE_ID#<br>
(Scoped) GetAppData.EMPLOYEE_ID = #GetAppData.EMPLOYEE_ID#<br>
</cfoutput>

关于javascript - 来自 JSON 的 ColdFusion 加密 ID,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49216331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com