我和我的团队正在开发一个VC++ 6项目.我们都使用相同的代码库(使用版本控制系统),据我们所知,所有编译器/链接器/环境设置(包括包含目录顺序)完全相同.当然,我们使用相同的VC++版本和相同的服务包(VC6 SP6).
问题是我们每个人构建的EXE有点不同.
我知道每次在同一台计算机上构建EXE时,文件中有3个位置,链接器存储时间戳.我不是在谈论这些差异.
虽然我们的EXE文件长度完全相同,但是当我们比较EXE时,有1000个不同的字节.其中许多字节的值相差0x20.
任何想法可能是什么原因?
编辑:调试版本(实际上,我们没有检查发布).
编辑:差异在二进制部分,而不是文本字符串.
编辑:所有开发人员使用相同的驱动器/文件夹名称,源和产品.
我有一个带模数m,公共指数e和私有指数的RSA私钥d,但我使用的程序需要模数的素因子p和q.
有可能使用e和d得到p和q?
我需要比较使用相同编译器/标志编译的2个可执行文件和/或共享对象,并验证它们没有更改.我们在受监管的环境中工作,因此对于测试目的而言,确切地隔离可执行文件的哪些部分已经发生变化非常有用.
由于包含有关文件信息的标头,因此使用MD5Sums/Hashes不起作用.
有没有人知道一个程序或方法来验证2个文件是否在执行上是相同的,即使它们是在不同的时间构建的?
我正在做一些研究或谷歌搜索处理密码散列和盐析的不同方法,并遇到了这个有趣的链接:
现在,基本上建议的是创建两个用户函数,一个用于散列,另一个用于检查散列.
盐是伪随机的,但实际上是基于密码(让我感觉不好?).
散列函数也伪随机地"散布"哈希字符串中的盐.
哈希检查功能反转盐洒,然后进行实际的哈希检查.
现在,我知道每个密码哈希的唯一salt =好,但是具有散列密码并创建存储在db函数中的salt的逻辑可能=坏.
我喜欢盐不明显的想法,它也不需要基于一些有希望的一致性值,如用户名,用户ID,出生日期等,但正如我所说,我确实对实现有疑问.
那么,人们对"最佳方法解决方案"的看法和想法是什么?
有没有办法强制相同的代码在Visual C++中生成相同的二进制文件?关闭PE中的时间戳或强制PE中的时间戳为某个固定值,换句话说?
c++ portable-executable visual-studio visual-c++ binary-reproducibility
当我使用c ++编译器构建项目时,如果源代码中没有更改,我可以确保生成的二进制文件不受影响吗?看起来每次我重新编译我的源代码时,二进制文件的md5校验和都会受到影响.编译的时间是否会以某种方式影响生成的二进制文件?如何生成可重复的编译结果?
出于二进制/源代码验证的目的,我希望能够在相同的计算机上相隔两周进行两次编译并使二进制文件相同,从而通过一些校验和测试.
到目前为止,我发现很可能时间戳将由编译器写入二进制文件.我可以通过对每个msdn文章的dumpbin/rawdata结果进行比较来解决这个问题.
http://support.microsoft.com/kb/164151
然而,垃圾箱结果在十几个地方仍然不同,差异似乎仍然是某种时间戳(例如从A1 73变为C4 76).
我假设这是delphi编译器放入代码/数据部分的时间戳,但我无法找到这种情况发生的位置或如何将其关闭.摆弄各种编译器/链接器选项并没有改变这种行为.
任何帮助将不胜感激.
delphi compiler-construction linker checksum binary-reproducibility
虽然其他 问题有关使用反射来绕过所有安全装置,直接调用基类的实现的覆盖方法一般都遭到了嘲笑,并呼吁重新设计有问题的代码,我想我已经在一个奇异的,但合法的使用情况下跌跌撞撞:委托序列化.由于我已经看到了其他问题,请不要用重新设计我的代码并停止尝试绕过类型系统的建议来轰炸我 - 我正在编写一个序列化格式化程序,而那些已经得到了忽略构造函数的传递.
令我沮丧的是,即使是v2.0 BCL也BinaryFormatter未能通过这个简单的NUnit测试:
[TestFixture]
public class DelegateSerializationTestFixture
{
[Test]
public void DelegateSerializationTest()
{
var bigKitty = new Lion();
var kittyNoise = bigKitty.GetKittyNoiseFunc();
Assert.AreEqual("Meow", kittyNoise());
var stream = new MemoryStream();
var formatter = new BinaryFormatter();
formatter.Serialize(stream, kittyNoise);
stream.Position = 0;
formatter = new BinaryFormatter();
var kittyNoise2 = (Func<string>)formatter.Deserialize(stream);
Assert.AreEqual("Meow", kittyNoise2()); // returns Grrr
}
}
[Serializable]
public class Lion : Cat
{
public override string GetNoise() …Run Code Online (Sandbox Code Playgroud) 根据我的经验,重新编译同一Android应用程序的源代码不会每次都生成相同的二进制文件.可重现的构建对开发人员非常有用,但我认为可重现的构建过程最重要的好处是安全性.在开源Android应用程序中,我们如何验证生成的二进制文件(.apk)是否真的是根据已审查的源代码编译的?有没有办法从Android SDK或Java生成可重现的构建?
我必须在我的项目中开发一个小工具,比如 Adobe Illustrator 或Kuler 中的“和谐色”调色板——用户可以选择一种或两种颜色,该工具会基于此建议一个 4 或 5 种“和谐”调色板。我在哪里可以找到有关此的一些文件、数学规则或其他背景?
c++ ×3
encryption ×2
linker ×2
visual-c++ ×2
.net ×1
android ×1
checksum ×1
color-scheme ×1
comparison ×1
delegates ×1
delphi ×1
executable ×1
hash ×1
java ×1
mysql ×1
open-source ×1
passwords ×1
reflection ×1
rsa ×1
salt ×1
windows ×1