我编写的每个使用3DES在Java中编码字符串的方法都无法解密回原始字符串.有没有人有一个简单的代码片段,只能编码,然后将字符串解码回原始字符串?
我知道我在这段代码中某处犯了一个非常愚蠢的错误.以下是我到目前为止一直在使用的内容:
**注意,我没有从encrypt方法返回BASE64文本,而且我在解密方法中不是base64 un-encoding,因为我试图看看我是否在BASE64部分拼图中犯了错误.
public class TripleDESTest {
public static void main(String[] args) {
String text = "kyle boon";
byte[] codedtext = new TripleDESTest().encrypt(text);
String decodedtext = new TripleDESTest().decrypt(codedtext);
System.out.println(codedtext);
System.out.println(decodedtext);
}
public byte[] encrypt(String message) {
try {
final MessageDigest md = MessageDigest.getInstance("md5");
final byte[] digestOfPassword = md.digest("HG58YZ3CR9".getBytes("utf-8"));
final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
for (int j = 0, k = 16; j < 8;)
{
keyBytes[k++] = keyBytes[j++];
}
final SecretKey key = new SecretKeySpec(keyBytes, "DESede");
final IvParameterSpec …Run Code Online (Sandbox Code Playgroud) 首先,我不是在寻找奇迹......我知道PHP是如何运作的,并且没有真正的方法可以在不使用加密的情况下从客户端隐藏我的代码.但这需要在运行的服务器上安装扩展的成本.
我正在寻找不同的东西......我不打算加密我的代码甚至混淆它.有许多PHP脚本没有加密/混淆代码,但它们是商业应用程序.例如,vBulletin和/或IP.Board论坛应用程序.
我只是想知道这些人用于他们的应用程序的方法...
我也对任何其他建议持开放态度.
请注意,我是一个人而不是为公司工作.我的产品也非常具体,它不会卖那么多.我只是想让你们知道,我无法向法律专业人士提起诉讼或起诉某人或准备商业执照.我只是在寻找一种简单的方法来保护我的简单产品,如果它确实可能,不知怎的......
我最近遇到了一个系统,其中所有的数据库连接都是由各种方式模糊的例程管理的,包括base 64编码,md5sums和各种其他技术.
这只是我,还是这种矫枉过正?有哪些替代方案?
我试图了解Java java.security.Signature类的功能.如果我计算SHA1消息摘要,然后使用RSA加密该摘要,我得到一个不同的结果,要求Signature类签署相同的东西:
// Generate new key
KeyPair keyPair = KeyPairGenerator.getInstance("RSA").generateKeyPair();
PrivateKey privateKey = keyPair.getPrivate();
String plaintext = "This is the message being signed";
// Compute signature
Signature instance = Signature.getInstance("SHA1withRSA");
instance.initSign(privateKey);
instance.update((plaintext).getBytes());
byte[] signature = instance.sign();
// Compute digest
MessageDigest sha1 = MessageDigest.getInstance("SHA1");
byte[] digest = sha1.digest((plaintext).getBytes());
// Encrypt digest
Cipher cipher = Cipher.getInstance("RSA");
cipher.init(Cipher.ENCRYPT_MODE, privateKey);
byte[] cipherText = cipher.doFinal(digest);
// Display results
System.out.println("Input data: " + plaintext);
System.out.println("Digest: " + bytes2String(digest));
System.out.println("Cipher text: " + bytes2String(cipherText)); …Run Code Online (Sandbox Code Playgroud) 我理解标准随机数生成器如何工作.但是当使用crytpography时,随机数确实必须是随机的.
我知道有些仪器可以读取宇宙白噪声以帮助产生安全的哈希值,但是你的标准PC没有这个.
加密安全随机数生成器如何在没有可重复模式的情况下获取其值?
我想用来has_secure_password在数据库中存储加密的密码.如果has_secure_password使用任何形式的腌制,我在互联网上找不到.如果它使用盐腌,它是如何工作的?谁能为我澄清一下这个?
泰斯
我想加密文件并将其存储在SD卡中.我想解密该加密文件并再次将其存储在SD卡中.我试图通过打开文件流加密文件并加密但是它不起作用.我想知道如何做到这一点.
问题
在我们在项目之间重用的堆栈中,我们在会话中放置了一些过多的数据,用于在页面之间传递数据.这在理论上是好的,因为它可以防止篡改,重放攻击等,但它会产生尽可能多的问题.
会话丢失本身是一个问题,尽管它主要通过实现会话状态服务器(或使用SQL Server)来处理.更重要的是,使后退按钮正常工作非常棘手,而且创建一种情况也是额外的工作,用户可以在三个选项卡中打开相同的屏幕来处理不同的记录.
这只是冰山一角.
大多数这些问题都有解决方法,但是当我磨砺掉时,所有这些摩擦让我觉得使用session在页面之间传递数据是错误的方向.
我真正想要做的是提出一个最佳实践,我的商店可以一直使用它来在页面之间传递数据,然后,对于新的应用程序,替换当前依赖于Session的堆栈的关键部分.
如果最终解决方案不会导致大量的样板管道代码,那也很好.
提出的解决方案
会议
如上所述,严重依赖Session 似乎是一个好主意,但它会打破后退按钮并导致其他一些问题.
可能有办法解决所有问题,但似乎需要做很多额外的工作.
使用会话非常好的一件事是篡改不是问题.与通过未加密的QueryString传递所有内容相比,您最终编写的守护代码更少.
跨页发布
事实上,我几乎没有考虑过这个选择.我有一个问题,它如何使页面紧密耦合 - 如果我开始做PreviousPage.FindControl("SomeTextBox"),这似乎是一个维护问题,如果我想从另一个页面可能没有到达此页面一个名为SomeTextBox的控件.
它似乎也受到其他方面的限制.也许我想通过链接访问该页面.
请求参数
我现在正倾向于这种策略,就像在过去那样.但我可能希望我的QueryString被加密以使其更难以篡改,我也想处理重放攻击的问题.
来自Rolla的4个人,有一篇关于此的文章.
但是,应该可以创建一个HttpModule来处理所有这些并从页面中删除所有加密香肠.果然,Mads Kristensen有一篇文章,他发布了一篇文章.但是,这些评论听起来似乎有极其常见的情况.
其他选择
当然,这不是对选项的详尽看法,而是我正在考虑的主要选项.此链接包含更完整的列表.我没有提到的那些如Cookies和Cache不适合在页面之间传递数据.
在结束...
那么,您如何处理页面之间传递数据的问题?你需要解决什么隐藏的陷阱,是否有任何预先存在的工具可以完美地解决它们?难道你觉得你已经得到了你和完全满意的解决方案?
提前致谢!
更新:以防万一我不够清楚,通过'在页面间传递数据'我正在谈论,例如,将CustomerID密钥从CustomerSearch.aspx页面传递给Customers.aspx,客户将在那里打开并且可以进行编辑.
encryption ×10
cryptography ×3
java ×2
security ×2
3des ×1
android ×1
asp.net ×1
c# ×1
certificate ×1
javascript ×1
obfuscation ×1
passwords ×1
php ×1
query-string ×1
random ×1
rsa ×1
salt ×1
webforms ×1