如何在RC文件中存储加密字符串?
可以在RC文件中存储加密字符串
当然可行,RC文件不仅能存储图片、动图这类二进制资源,也完全支持嵌入字符串类资源,正好能满足你复用源码、仅通过替换资源文件适配不同客户的需求。
具体实现方式
方式1:直接在RC文件中定义字符串
你可以沿用RCDATA类型,把加密字符串用双引号包裹后直接写入RC文件,示例如下:
splash RCDATA splash.png logo RCDATA logo.png working RCDATA working.gif customer_key RCDATA "wlny'q|*lz-s‡q~‚y5…}8|"
如果字符串本身包含双引号,只需用反斜杠转义(写成\")即可。
方式2:通过外部文本文件嵌入字符串
如果字符串包含大量特殊字符,或者需要针对不同客户单独维护,更稳妥的方式是把加密字符串保存为独立文本文件(比如customer_key.txt),再在RC文件中引用:
customer_key RCDATA customer_key.txt
这种方式能避免RC文件内的转义问题,后续替换客户专属字符串时,只需替换对应的文本文件,无需修改RC本身。
注意事项
- 编码适配:由于你的字符串包含非ASCII特殊字符(比如
‡、‚、…),要确保RC文件或外部文本文件的编码为UTF-8(带BOM),且与程序读取资源时的编码逻辑一致,避免出现乱码。 - 资源读取逻辑:
RCDATA会原样存储内容,不会自动添加字符串终止符。在程序中读取时,按二进制流读取即可,若需要作为字符串使用,可自行追加终止符(比如\0)。
以Delphi为例,读取该资源的示例代码:
function GetCustomerKey: string; var ResStream: TResourceStream; begin ResStream := TResourceStream.Create(HInstance, 'customer_key', RT_RCDATA); try SetLength(Result, ResStream.Size div SizeOf(Char)); ResStream.ReadBuffer(Result[1], ResStream.Size); finally ResStream.Free; end; end;
内容的提问来源于stack exchange,提问作者delphirules
相关产品推荐
相关产品推荐

