系统如何知道例如在svn环境中,如果输入的密码正确,则使用DES crypt散列将帐户存储在.passwd中.
纠正我如果我错了,但如果我转换某个密码,例如"测试"使用DES哈希,因为盐有很多可能性.系统(我想象它只是比较生成的哈希值)如何知道输入的密码是否正确?
我正在寻找有关如何生成双倍长度3-DES密钥的信息,代码示例,java库.有人可以指导我吗?
非常感谢你!
我正在尝试序列化一个对象(在这种情况下是一个简单的字符串),加密它,并将其写入文件.加密似乎有效,但解密总是失败.我试过四处寻找,但我似乎无法弄清楚我做错了什么..
// Create a new key to encrypt and decrypt the file
byte[] key = "password".getBytes();
// Get a cipher object in encrypt mode
Cipher cipher = null;
try {
DESKeySpec dks = new DESKeySpec(key);
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey desKey = skf.generateSecret(dks);
cipher = Cipher.getInstance("DES");
cipher.init(Cipher.ENCRYPT_MODE, desKey);
} catch (InvalidKeyException | NoSuchAlgorithmException | InvalidKeySpecException | NoSuchPaddingException ex) {
System.err.println("[CRITICAL] Incryption chiper error");
}
// Encrypt the file
try {
new ObjectOutputStream(new CipherOutputStream(new FileOutputStream("test"), cipher)).writeObject("test text");
} catch (IOException e) …
Run Code Online (Sandbox Code Playgroud) 有谁知道我在哪里可以找到64位DES算法的每个组件的测试向量(Key schedul,密码函数等)?例如,我想测试64位密钥生成并生成所有16个密钥生成.我在VHDL中实现算法,所以我需要检查组件.我的实现基于本文.
谢谢
我正在尝试为DES上的暴力攻击编写一个程序,键是一个由8位字符组成的字符串,例如(12345678).
所以我需要一些帮助来编写一个程序,我可以将测试键设置为(00000000)并开始逐步循环(00000001),(00000002)直到(99999999)并且每次尝试按键.
我已经完成了DES程序,现在我的大脑仍然坚持这部分.
更新:非常感谢Hyperboreus,关键生成器功能,但是当我在我的程序中使用它时,我收到错误消息
UnicodeDecodeError:'utf-8'编解码器无法解码位置1中的字节0xbf:无效的起始字节
任何大于(00000002)的密钥
这是我的代码
from Crypto.Cipher import DES
import os
import base64
print ("key size is fixed at 16 Bytes including parities (56 bits effective)")
size = 16
key = '00000002'
cipher = DES.new(key)
BS = 8
def getMode():
while True:
mode = input('Do you wish to Encrypt "e", Decrypt "d" or Brute force "b" a message?\n')
if mode in 'e d b'.split():
return mode
else:
print('Enter either "e" for encrypt,"d" for decrypt, or "b" …
Run Code Online (Sandbox Code Playgroud) 我在解密时遇到此错误,我经历了类似的帖子,但是我没有从那里得到任何帮助。我想将对象直接存储在带有加密的文件中,因为我已经在这里发布了我的问题。但是,在使用流时,我得到的错误与使用字符串得到的错误相同。
package security;
import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.SecretKeyFactory;
import javax.crypto.spec.DESedeKeySpec;
import sun.misc.BASE64Decoder;
import sun.misc.BASE64Encoder;
/**
* This class defines methods for encrypting and decrypting using the Triple DES
* algorithm and for generating, reading and writing Triple DES keys. It also
* defines a main() method that allows these methods to be used from the command
* line.
*/
public class TripleDesEncryptionDecryption {
/**
* The program. The first argument must be -e, -d, or …
Run Code Online (Sandbox Code Playgroud) 好的,最初的任务是在2个能够共享用户cookie的"友好"网站中跟踪用户(比方说,我有example.com,我的朋友有mysite.com,而且他有一个域simple.example. com所以他可以在.example.com上设置cookie.
要跟踪我们想要设置唯一cookie的用户活动,此cookie应该是唯一的并且长度为32个字节(ascii).从这个角度来看非常简单,可以这样实现:
md5(microtime)
Run Code Online (Sandbox Code Playgroud)
就是这样,但现在我们有了新的约束:
我们应该能够告诉谁确切地设置了cookie:exmaple.com引擎或mysite.com引擎
仍然需要32个字节的长度
我们应该能够加密时间戳(发布cookie时)
结果cookie值的第一个和最后一个字符应该不同,所以我们可以根据cookie进行A/B测试(所以我们总是可以说,如果cookie的最后一个字符是"> K",则显示此用户"功能A")
鉴于结果字符串的长度应始终为32个或更少,并且数据应加密和解密(当然不是用户),并且字符串对于用户应该是唯一的,这使得任务非常复杂.
我的想法和问题:
我们应该使用对称密钥加密(解决约束 1和3),但是在这种情况下我们如何确保结果字符串不超过32个字符(约束 2)?
考虑到我们需要加密的数据量是:时间戳和微秒(14字节),站点发布者标志(1字节)=总共15字节,还有其他解决方案吗?
我的第一个想法是将数据打包成二进制字符串而不是base64编码.结果将是8-chars长base64编码的字符串:
def encode():
base64( pack('Lv', timestamp, microseconds) )
Run Code Online (Sandbox Code Playgroud)
在开头和结尾添加site-issuer标志和字符:
def getCookie():
rand('a'...'Z') + encode() + issuerFlagChar() + rand('a'...'Z')
Run Code Online (Sandbox Code Playgroud)
因此,结果是11个字符长,我们很容易满足约束2.
但问题是:这个算法肯定不安全,我不确定数百万网站用户的结果字符串是否是唯一的.
我想知道我是否可以为此目的使用DES或AES,但我不确定结果字符串是否总是满足约束2(结果字符串不应超过32个ascii字符).
是否存在对称密钥算法,以确保"如果使用M字节密钥加密N个字节,那么结果数据长度为Math.Ceil(N*2 + 1/M)字节"?因此产生的长度是可预测的?
我试图将文本文件的加密内容复制到内存流中,然后解密这些内容并将其复制到新的内存流中。当我到达发生复制的代码时,我在调试时收到无效数据错误。
这是我得到的代码块:
Function DecryptFile(ByVal sInputFilename As String, ByVal sKey As String) As Byte()
Dim DES As New DESCryptoServiceProvider()
DES.Key() = ASCIIEncoding.ASCII.GetBytes(sKey)
DES.IV = ASCIIEncoding.ASCII.GetBytes(sKey)
Dim desdecrypt As ICryptoTransform = DES.CreateDecryptor()
Dim encryptedByteArray() As Byte
encryptedByteArray = File.ReadAllBytes(sInputFilename)
Dim encryptedMS As MemoryStream = New MemoryStream(encryptedByteArray)
Dim cryptostreamDecr As New CryptoStream(encryptedMS, desdecrypt, CryptoStreamMode.Read)
Dim decryptedMS As MemoryStream = New MemoryStream()
cryptostreamDecr.CopyTo(decryptedMS) 'Error occurs here
cryptostreamDecr.Close()
Return decryptedMS.ToArray()
End Function
Run Code Online (Sandbox Code Playgroud)
我正在关注散布在网络上的示例,从我读过的内容来看,这段代码应该可以工作......
谁能向我解释我做错了什么?
我正在尝试构建自己的DES实现!但是我没有成功实施
我使用所有的表,如Initail排列,扩展排列表,排列函数表,PC-1,PC-2和我自己的随机位位置的所有s-box.
我们应该使用DES提供的S-Box还是我们自己创建的?
如何使用充气城堡(DESEngine)加密和解密文件(而不是字符串)?我之前搜索过但找不到帮助.
我encrypt
无法encrypted_strings
为我提供的特定密码从库中提取使用该方法生成的 IV 。从文档中,我看到此方法使用 C 库根据密码生成密钥和 iv,该库调用与 openssl 相同的方法来生成密钥和 iv:EVP_BytesToKey。
我想要做的是能够为我指定的任何密码打印 IV,以便我可以将加密移植到另一种语言。
你能想到从密码中提取/打印这个 IV 向量的任何方法吗?
这些是该库使用的算法、模式和填充的详细信息:
下面的 ruby 脚本打印出加密的消息,但不知道使用了哪个 iv。
#!/usr/bin/ruby
require 'encrypted_strings'
data = 'Whackabad'
password = 'bAJLyifeUJUBFWdHzVbykfDmPHtLKLMzViHW9aHGmyTLD8hGYZ'
encrypted_data = data.encrypt(:symmetric, :password => password)
printf "Data: #{data}\n"
printf "Encrypted Data: #{encrypted_data}"
Run Code Online (Sandbox Code Playgroud)
我尝试使用openssl
它,因为它允许我打印使用-p
选项生成的 iv 和密钥,但它使用PKCS7
填充而不是PKCS5
. 因此,如果我运行下面的命令,则不会打印与上面的 ruby 代码相同的加密字符串。
echo -n 'Whackabad' | openssl enc -des-ede3-cbc -nosalt -a -k bAJLyifeUJUBFWdHzVbykfDmPHtLKLMzViHW9aHGmyTLD8hGYZ
Run Code Online (Sandbox Code Playgroud)
注意:-a:base64 编码,-k:密码和 echo -n:从字符串中删除新行,使其与字符串中的 ruby 大小完全相同。
如果我添加 …