Tag: encryption

在页面之间传递数据的最佳实践

问题 在项目之间重复使用的堆栈中,我们在会话中传递了一些数据,以便在页面之间传递数据。 这在理论上是好的,因为它防止篡改,重放攻击等等,但是它创造了许多问题。 会话丢失本身是一个问题,虽然它主要通过实现会话状态服务器(或通过使用SQL Server)来处理。 更重要的是,让后退button正常工作是非常棘手的,而且还需要额外的工作来创build一个用户可以在三个选项卡中打开同一屏幕以处理不同logging的情况。 而这只是冰山一angular。 对于这些问题,大部分都有解决方法,但是随着我的磨砺,所有这些摩擦都让我觉得,使用会话在页面之间传递数据是错误的方向。 我真正想要做的是提出一个最佳实践,我的商店可以随时使用页面之间的数据传递,然后,对于新的应用程序,replace目前依赖于Session的堆栈的关键部分。 如果最终的解决scheme不会导致大量的样板代码,这也是很好的。 build议的解决scheme 会议 如上所述,倚重Session就好像是一个好主意,但是它打破了后退button,导致了一些其他的问题。 可能有办法解决所有的问题,但似乎有很多额外的工作。 有一件事使用会话是非常好的事实,篡改是不是一个问题。 与通过未encryption的QueryString传递所有内容相比,最终编写的守护代码要less得多。 跨页面发布 事实上,我几乎没有考虑这个选项。 我有一个问题,它是如何紧密耦合,使页面 – 如果我开始做PreviousPage.FindControl(“SomeTextBox”),这似乎是一个维护问题,如果我想要从另一个页面,可能没有这个页面一个名为SomeTextBox的控件。 在其他方面似乎也受到限制。 也许我想通过链接进入页面,例如。 请求参数 我现在正在倾向于这个策略,就像在古代那样。 但是我可能希望我的QueryString被encryption以使其难以被篡改,并且我也想要处理重放攻击的问题。 来自罗拉的4个人, 有一篇关于这个的文章 。 但是,应该可以创build一个HttpModule来处理所有这些操作,并从页面中删除所有的encryption香肠。 果然, Mads Kristensen有一篇文章发表了一篇文章。 然而,这些评论听起来像是在极其常见的情况下有问题。 其他选项 当然,这并不是对选项的看法,而是我正在考虑的主要选项。 此链接包含更完整的列表。 那些我没有提到的如Cookies和Cache不适合在页面之间传递数据的目的。 正在closures… 那么,你如何处理页面之间传递数据的问题呢? 你有什么隐藏的陷阱需要解决,是否有任何预先存在的工具可以完美地解决它们? 你觉得你有一个解决scheme,你完全满意吗? 提前致谢! 更新:为了防止我不够清楚,通过“在页面之间传递数据”我正在谈论,例如,从CustomerSearch.aspx页面传递CustomerID键到Customers.aspx,客户将被打开并可以进行编辑。

JavaScriptstringencryption和解密?

我有兴趣构build一个个人使用的小应用程序,使用JavaScript来encryption和解密客户端的信息。 encryption的信息将被存储在服务器上的数据库中,但不会被解密的版本。 它不必是超级安全的,但我想使用一个目前不间断的algorithm。 理想情况下,我可以做类似的事情 var gibberish = encrypt(string, salt, key); 生成编码的string,等等 var sensical = decrypt(gibberish, key); 稍后解码。 到目前为止,我已经看到这个: http : //bitwiseshiftleft.github.io/sjcl/ 我应该看的任何其他图书馆?

在iPhone应用程序中使用SSL – 导出合规性

我正在创build一个iPhone应用程序,将与REST Web服务进行通信。 因为一些用户敏感的数据(姓名,地址,年龄等)将被传输,我正在寻求保护与SSL的连接。 但是,在我之前的作品中,我发现我得到的第一个问题是“您的应用程序使用encryption吗?” 根据这个问题和其他后续问题的答案,可能需要美国的出口合规。 我的公司不在美国,也没有美国办事处。 有没有其他人提交使用SSL的应用程序用于这种目的? 如果是这样,你是否需要做任何事情来获得苹果或美国政府的使用许可?

如何在Apache上默认启用完美的前向保密?

警告:请仅从以下答案中使用Apacheconfiguration的build议。 要使用哪种密码 – 安全规范会随着时间而改变,下面的一些安全build议已经过期。 在最近发生的事件之后,我一直在重新考虑我的Apache设置。 目前,我的apache站点configuration看起来像这样: <IfModule mod_ssl.c> <VirtualHost *:80> ServerName example.com ServerAlias www.example.com Redirect permanent / https://example.com </VirtualHost> <VirtualHost *:443> ServerAdmin webmaster@localhost ServerName example.com DocumentRoot /var/www-wordpress <Directory /> Options FollowSymLinks AllowOverride None </Directory> <Directory /var/www-wordpress> Options Indexes FollowSymLinks MultiViews AllowOverride FileInfo Order allow,deny allow from all </Directory> ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/ <Directory "/usr/lib/cgi-bin"> AllowOverride None […]

在JavaScript中安全的随机数字?

如何在JavaScript中生成密码安全的随机数字?

盐生成和开源软件

据我所知,生成盐的最佳做法是使用存储在源代码中的一些神秘公式(甚至魔术常数)。 我正在开发一个我们计划以开源方式发布的项目,但问题在于,源代码是生成盐类的秘密公式,因此可以在我们的网站上运行彩虹表攻击。 我认为,很多人在我面前都考虑过这个问题,我想知道最佳实践是什么。 在我看来,如果代码是开源的,那么根本就没有任何意义,因为盐可以很容易地被反向工程化。 思考?

Microsoft Crypto API禁用使用RSAES-OAEP密钥传输algorithm

我正在使用CryptEncryptMessage来生成一个PKCS#7封装的消息。 我使用szOID_NIST_AES256_CBC作为encryptionalgorithm。 生成的消息似乎是有效的,但密钥传输algorithm的RSAES-OAEP在野外的支持有限(Thunderbird,OpenSSL SMIME模块之间的许多人不支持它)。 我想让CAPI恢复到旧的RSAencryptionencryption密钥传输。 有没有办法做到这一点,我可以恢复到低级消息传递函数,如果有一种方法,而不是使用CryptEncryptMessage但我找不到一种方法,即使使用低级别的function。 码: CRYPT_ENCRYPT_MESSAGE_PARA EncryptMessageParams; EncryptMessageParams.cbSize = sizeof(CMSG_ENVELOPED_ENCODE_INFO); EncryptMessageParams.dwMsgEncodingType = PKCS_7_ASN_ENCODING; EncryptMessageParams.ContentEncryptionAlgorithm.pszObjId = szOID_NIST_AES256_CBC; EncryptMessageParams.ContentEncryptionAlgorithm.Parameters.cbData = 0; EncryptMessageParams.ContentEncryptionAlgorithm.Parameters.pbData = 0; EncryptMessageParams.hCryptProv = NULL; EncryptMessageParams.pvEncryptionAuxInfo = NULL; EncryptMessageParams.dwFlags = 0; EncryptMessageParams.dwInnerContentType = 0; BYTE pbEncryptedBlob[640000]; DWORD pcbEncryptedBlob = 640000; BOOL retval = CryptEncryptMessage(&EncryptMessageParams, cRecipientCert, pRecipCertContextArray, pbMsgText, dwMsgTextSize, pbEncryptedBlob, &pcbEncryptedBlob);

混淆一个ID

我正在寻找一种方法来encryption/混淆一个整数ID到另一个整数。 更确切地说,我需要一个函数int F(int x) ,所以 (x)是一一对应的(如果x!= y,F(x)!= F(y)) 给定F(x),很容易找出x – 所以F不是散列函数 给定x和F(x)很难/不可能找出F(y),像x ^ 0x1234这样的东西是行不通的 为了清楚起见,我并不是在寻找一个强大的encryption解决scheme,这只是混淆。 想象一个像example.com/profile/1等url的web应用程序。个人资料本身并不是秘密的,但是我想阻止偶然的voyeurs一个接一个地查看/获取所有configuration文件,所以我宁愿把它们隐藏在像example.com/profile/23423东西上。虽然数据库存储的令牌可以很容易地完成这项工作,但我很好奇,如果有一些简单的math可用这个。 我不清楚的一个重要的要求是结果应该看起来是“随机的”,即给定序列x,x+1,…,x+n , F(x),F(x+1)…F(x+n)不应该形成任何forms的进展。

如何解密encryption的苹果iTunes iPhone备份?

许多不幸的iPhone用户已经问过我,帮助他们从iTunes备份中恢复数据。 当它们是未encryption的时候,这很容易,但是当它们被encryption时,不pipe密码是否已知。 因此,我试图找出encryption时在mddata和mdinfo文件上使用的encryptionscheme。 否则,我没有任何问题阅读这些文件,并build立了一些强大的C#库来做到这一点。 (如果你能帮忙,我不在乎你用哪种语言,这是我在这之后的原则!) 苹果公司的“iPhone OS企业部署指南”指出:“通过在iTunes的设备摘要窗格中selectencryptioniPhone备份选项,可以以encryption格式存储设备备份,文件使用AES128加256位密钥进行encryption。安全地存储在iPhone钥匙串中“。 这是一个很好的线索,在这里有关于iPhone上的Stackoverflow的一些很好的信息AES / Rijndael互操作性build议可以使用128和CBC模式的密钥大小。 除了任何其他混淆之外,还需要一个密钥和初始化向量(IV)/盐。 有人可能会认为,密钥是对“备份密码”的操纵,用户被iTunes提示input并传递给“C 苹果移动备份”,按照CBC规定的方式填充。 但是,鉴于对iPhone钥匙串的引用,我想知道“备份密码”是否可能不被用作X509证书或对称私钥的密码,并且证书或私钥本身可能被用作密钥。 ( AES和iTunesencryption/解密过程是对称的。) IV是另一回事,可能是一些事情。 也许这是硬编码到iTunes或者设备本身的关键之一 。 尽pipe上面的苹果的评论暗示了设备钥匙链上存在的关键,但我认为这并不重要。 可以将encryption的备份恢复到不同的设备,这意味着与解密有关的所有信息都存在于备份和iTunesconfiguration中,并且在这种情况下,任何单独在设备上的任何内容都是不相关的和可replace的。 那么关键在哪里呢? 我已经从Windows机器上列出了下面的path,但是我们使用的操作系统非常多。 “\ appdata \ Roaming \ Apple Computer \ iTunes \ itunesprefs.xml”包含一个带有“Keychain”字典条目的PList。 “\ programdata \ apple \ Lockdown \ 09037027da8f4bdefdea97d706703ca034c88bab.plist”包含一个具有“DeviceCertificate”,“HostCertificate”和“RootCertificate”的PList,所有这些看起来都是有效的X509证书。 相同的文件也似乎包含不对称的密钥“RootPrivateKey”和“HostPrivateKey”(我的阅读表明这些可能是PKCS#7-enveloped)。 此外,在每个备份中,Manifest.plist文件中都有“AuthSignature”和“AuthData”值,尽pipe这些值在每个文件逐渐备份后都会随之旋转,但build议将它们用作关键字,除非真正有用相当的参与正在完成。 这里有很多误导的东西,暗示从encryption的备份中获取数据很容易。 这不是,据我所知还没有完成。 绕过或禁用备份encryption完全是另一回事,而不是我想要做的。 这不是要破解iPhone或类似的东西。 我之后的所有内容都是从encryption的iTunes备份中提取数据(照片,联系人等)的手段,因为我可以将其encryption。 我已经尝试了各种排列与我放在上面的信息,但没有任何地方。 我会很感激任何想法或技巧,我可能错过了。

鉴于最后的块没有正确填充

我想实现基于密码的encryptionalgorithm,但我得到这个exception: javax.crypto.BadPaddingException:给定的最终块未正确填充 可能是什么问题? (我是Java新手。) 这是我的代码: public class PasswordCrypter { private Key key; public PasswordCrypter(String password) { try{ KeyGenerator generator; generator = KeyGenerator.getInstance("DES"); SecureRandom sec = new SecureRandom(password.getBytes()); generator.init(sec); key = generator.generateKey(); } catch (Exception e) { e.printStackTrace(); } } public byte[] encrypt(byte[] array) throws CrypterException { try{ Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding"); cipher.init(Cipher.ENCRYPT_MODE, key); return cipher.doFinal(array); […]