ColdFusion - cfusion_encrypt()和cfusion_decrypt() - C#替代品

 用户r5oydafsky 发布于 2023-01-19 09:55

我有一个数据库,其中包含通过cfusion_encrypt()加密的用户密码.我需要为C#中的ColdFusion代码做一个登录替代.有没有简单的方法如何在C#中模拟这个,这样我就可以比较用户密码的加密值并将它们与ColdFusion值匹配?

1 个回答
  • 名字不好cfusion_encrypt()根本就不是加密.它是一种内部的遗留混淆算法,强烈建议不要使用它.

    本质上它只是xor的字节,类似于这里描述的方法(忽略提及cfmx_compat,这是一个不同的遗留算法).它提取纯文本字符串的字节.然后将提供的key字符串填充到相同的长度,并再次提取字节.最后,xor是两个字节数组,并将结果编码为十六进制:

     // xor bytes
     byte[] result = new byte[textBytes.Length];
     for (int i = 0; i < textBytes.Length; i++) {
          results[i] = (byte)(textBytes[i] ^ keyBytes [i]);
     } 
     // encode result as hex
     String hexResult = BitConverter.ToString(results).Replace("-", "");
    

    cfusion_decrypt()函数基本上只是将十六进制字符串首先解码为字节,然后将"去混淆"结果作为普通字符串而不是十六进制返回.

    现在你可以看到为什么不鼓励使用它.正如@MartyPine和其他人所建议的那样,更好的选择是让CF端进行备份,然后运行密码cfusion_decrypt并使用hash()代替它们.它不仅是存储密码的更好方式,还具有与C#或支持标准算法的任何其他语言兼容的优点.

    2023-01-19 10:01 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有