目前据说MD5部分不安全.考虑到这一点,我想知道用于密码保护的机制.
这个问题,"双重哈希"密码是否比仅仅哈希一次更安全? 建议多次散列可能是一个好主意,而如何实现单个文件的密码保护?建议使用盐.
我正在使用PHP.我想要一个安全快速的密码加密系统.散列密码一百万次可能更安全,但也更慢.如何在速度和安全性之间取得良好的平衡?另外,我更喜欢结果具有恒定数量的字符.
另外,我应该在数据库中存储两个字段(例如,一个使用MD5,另一个使用SHA)?它会使它更安全或更不安全吗?
如果我不够清楚,我想知道使用哪种散列函数以及如何选择好的盐以便拥有安全和快速的密码保护机制.
相关问题并不完全涵盖我的问题:
PHP中的SHA和MD5有什么区别
简单密码加密
存储密钥的安全方法,asp.net的密码
如何在Tomcat 5.5中实现salted密码
我很好奇你如何保护你的软件免受破解,黑客攻击等.
你是否采用某种序列号检查?硬件钥匙?
您使用任何第三方解决方案吗?
您如何解决许可问题?(例如管理浮动许可证)
编辑:我不是说任何开源,但严格的商业软件分发...
我-Wstack-protector
在编译正在进行的项目时启用了警告(商业多平台C++游戏引擎,使用GCC 4.2在Mac OS X 10.6上进行编译).此标志警告即使-fstack-protector
启用了也不会防止堆栈粉碎的功能.GCC在构建项目时会发出一些警告:
不保护功能:没有缓冲区至少8个字节长
不保护局部变量:可变长度缓冲区
对于第一个警告,我发现可以调整缓冲区在函数中使用时必须具有的最小大小,以防止此函数发生堆栈粉碎:--param ssp-buffer-size=X
可以使用,默认情况下X为8,可以为低至1.
对于第二次警告,除非我停止使用,否则无法抑制其发生-Wstack-protector
.
-fstack-protector
使用?(例如,在开发期间的所有时间,或者只是在跟踪错误时?) -fstack-protector-all
使用? -Wstack-protector
告诉我?它是否暗示我减少缓冲区最小尺寸? -Wstack-protector
如果您想要一个无警告的构建,它似乎不是您想要随时启用的那种标志.这是正确的吗?我的github项目中有一些贡献者.我想只允许其中一个"推"到掌握.而这个人不是我(存储库的所有者).有可能吗?
在Java中的equals(Object o)方法中,我可以访问传入对象的私有变量,而无需通过其公共getter.
public boolean equals(Object o){
...
MyObject other = (MyObject)o;
return getProp() == other.prop;
}
Run Code Online (Sandbox Code Playgroud)
怎么样?
我免费发布了一堆工具,但最近我开始销售一个有私人研究的应用程序,人们已经能够获得我的源代码,一个人公开发布我的整个源代码.我花了很多时间在这个程序上,只是为了让别人破解它,并释放我的整个源代码.
我怎样才能保护我的程序?我尝试过HWID,但人们仍然可以破解它.我知道我受限于C#,但它最方便使用.我只需要一种方法来保护我的程序免受试图这样做的人的影响.
另一个问题,即Best .NET混淆工具/策略,询问是否使用工具轻松实现混淆.
我的问题是,混淆是否有效?在回答这个答案的评论中,有人说" 如果你担心来源被盗......混淆对于一个真正的破解者来说几乎是微不足道的 ".
我查看了Dotfuscator社区版的输出:它看起来对我来说是模糊的!我不想保持这一点!
我知道简单地"破解"混淆软件可能相对容易:因为您只需要找到软件中的任何位置即可实现您想要破解的任何位置(通常是许可证保护),并添加跳转以跳过它.
如果担心的不仅仅是最终用户或"盗版者"的破解:如果担心"来源被盗",即如果您是软件供应商,而您担心的是另一个供应商(潜在的竞争对手)逆转 - 设计你的来源,然后他们可以使用或添加到他们自己的产品......简单混淆在多大程度上是对这种风险的充分或不充分的保护?
第一次编辑:
有问题的代码大约是20个KLOC,它运行在最终用户机器上(用户控件,而不是远程服务).
如果混淆真的" 对于一个真正的破解者来说几乎是微不足道的 ",我想要了解为什么它无效(而不仅仅是"多少"它没有效果).
第二次编辑:
我并不担心某人正在改变算法:更担心他们将算法的实际实现(即源代码)重新用于他们自己的产品.
确定20个KLOC是几个月的开发工作,是否需要多于或少于这个(几个月)对其进行反混淆处理?
甚至有必要对某些东西进行反混淆以便"窃取"它:或者一个理智的竞争者可能只是将它批量地整合到他们的产品中,同时仍然混淆,接受它是一个维护噩梦,并希望它几乎不需要维护?如果这种情况是可能的,那么混淆.Net代码比编译的机器代码更容易受到这种影响吗?
大多数混淆"军备竞赛"的主要目的是阻止人们甚至"破解"某些东西(例如查找和删除实施许可保护/执法的代码片段),而不是防止"来源盗窃"?
①在下面的C#代码中,出现了CS1729,但据我所知,CS0122更合适.
namespace A
{
class Program
{
static void Main()
{
Test test = new Test(1);
}
}
class Test
{
Test(int i) { }
}
}
Run Code Online (Sandbox Code Playgroud)
CS1729:'A.Test'不包含带有1个参数的构造函数
CS0122:'A.Test.Test(int)由于其保护级别而无法访问'
②在下面的C#代码中,出现CS0122,但据我所知CS1729更合适
namespace A
{
class Program
{
static void Main()
{
Test test = new Test();
}
}
class Test
{
Test(int i) { }
}
}
Run Code Online (Sandbox Code Playgroud)
CS0122:'A.Test.Test(int)由于其保护级别而无法访问'
CS1729:'A.Test'不包含带0参数的构造函数
问题:①和②中交换CS0122和CS1729是否有任何原因或者是这个C#编译器错误?
PS:可以使用Microsoft Visual C#2010编译器版本4.030319.1重现①和②中的错误.
我收到了这个错误,但我认为如果会员的保护级别太高并且无法访问它我只能得到它,但无论如何我都会得到它.
Shopable.h:
#ifndef _SHOPABLE_H_
#define _SHOPABLE_H_
#include "Library.h"
class Shopable{
private:
std::string Name;
int Cost;
std::string Description;
public:
std::string getName() const{return Name;}
int getCost() const {return Cost;}
virtual std::string getDesc() const = 0;
};
#endif
Run Code Online (Sandbox Code Playgroud)
Weapon.h:
#ifndef _WEAPON_H_
#define _WEAPON_H_
#include "Globals.h"
#include "Shopable.h"
class Weapon : Shopable{
private:
int Damage;
public:
Weapon(int Cost,int Damage,std::string Name) : Cost(Cost), Damage(Damage), Name(Name){}
std::string getDesc() const{
return getName()+"\t"+tostring(Damage)+"\t"+tostring(Cost);
}
int Damage(Entity *target){
int DamageDealt = 0;
//do damage algorithm things here
Special();
return …
Run Code Online (Sandbox Code Playgroud) 我用C编写了一个应用程序,我试图了解-fno-stack-protector
编译时命令的用途是什么.对于我的特定应用程序,如果我在防止缓冲区溢出方面使用此命令,则没有任何区别.
我在网上看到,-fstack-protector
和-fno-stack-protector
命令分别启用和禁用堆栈粉碎保护器,但如果我自己编译应用程序,如何预先启用保护器?命令的使用是否可能取决于运行应用程序的系统?