这是一个初学者的问题,
每次我在互联网上搜索时,使用DESCryptoServiceProvider函数解密总是返回一个字符串.
我们怎样才能获得返回的byte []?
这是代码.感谢您的任何帮助.
DESCryptoServiceProvider cryptoProvider = new DESCryptoServiceProvider();
cryptoProvider.Padding = PaddingMode.None;
cryptoProvider.Mode = CipherMode.CBC;
MemoryStream memoryStream = new MemoryStream(value);
CryptoStream cryptoStream = new CryptoStream(memoryStream,
cryptoProvider.CreateDecryptor(password, initVector), CryptoStreamMode.Read);
StreamReader reader = new StreamReader(cryptoStream);
return reader.ReadToEnd();
//how to return byte[];
Run Code Online (Sandbox Code Playgroud) 已经了解AES是首选的加密方法,如果可能的威胁在脚本小子级别上,是否应该重写使用DES的现有代码?(例如,pkzip密码可以通过非计算机专业人员使用免费实用工具进行破解,DES也是如此?)快速谷歌搜索似乎意味着即使弃用的DES仍然需要超级计算机和大量时间 - 或者有时间改变?
特别是,此CAPTCHA库使用DES加密在视图状态中发送给用户的质询字符串.
我正在使用BigIntegers在Java中实现DES加密.
我通过执行BigInteger.leftShift(int n)方法将Java二进制密钥与Java BigIntegers一起移位.N(Kn)的关键取决于Kn-1的移位结果.我得到的问题是,我在生成每个密钥后打印出结果,并且转移不是预期的输出.密钥分为2 Cn和Dn(分别为左和右).
我特意尝试这个:"要进行左移,将每个位移到左边一个位置,除了第一个位,循环到块的末尾."
根据转变,似乎最终会对O进行攻击.不知道如何纠正这个问题.
结果:
c0:11110101010100110011000011110
d0:11110001111001100110101010100
c1:111101010101001100110000111100
d1:111100011110011001101010101000
c2:11110101010100110011000011110000
d2:11110001111001100110101010100000
c3:1111010101010011001100001111000000
d3:1111000111100110011010101010000000
c4:111101010101001100110000111100000000
d4:111100011110011001101010101000000000
c5:11110101010100110011000011110000000000
d5:11110001111001100110101010100000000000
c6:1111010101010011001100001111000000000000
d6:1111000111100110011010101010000000000000
c7:111101010101001100110000111100000000000000
d7:111100011110011001101010101000000000000000
c8:1111010101010011001100001111000000000000000
d8:1111000111100110011010101010000000000000000
c9:111101010101001100110000111100000000000000000
d9:111100011110011001101010101000000000000000000
c10:11110101010100110011000011110000000000000000000
d10:11110001111001100110101010100000000000000000000
c11:1111010101010011001100001111000000000000000000000
d11:1111000111100110011010101010000000000000000000000
c12:111101010101001100110000111100000000000000000000000
d12:111100011110011001101010101000000000000000000000000
c13:11110101010100110011000011110000000000000000000000000
d13:11110001111001100110101010100000000000000000000000000
c14:1111010101010011001100001111000000000000000000000000000
d14:11110001111001100110101010100000000000000000000000000000000
c15:11110101010100110011000011110000000000000000000000000000
d15:111100011110011001101010101000000000000000000000000000000000
我已经能够通过使用命令创建一个受DES3密码保护的RSA密钥(嗯...... 我认为因为我对这个加密世界很新)
openssl genrsa -out "/tmp/myKey.pem" -passout pass:"f00bar" -des3 2048
Run Code Online (Sandbox Code Playgroud)
现在,如果可能的话,我想在Python脚本中使用PyCrypto.我看到过这条消息,似乎不鼓励使用PyCrypto来做到这一点.还是那样吗?
当然我总是可以打电话os.execute,执行上面的命令,但我会考虑"作弊" :-).我正在这样做以学习PyCrypto.
先感谢您.
我有以下生成密钥的c#代码:
public static byte[] Encrypt(byte[] plainData, string salt)
{
DESCryptoServiceProvider DES = new DESCryptoServiceProvider();
DES.Key = ASCIIEncoding.ASCII.GetBytes(salt);
DES.IV = ASCIIEncoding.ASCII.GetBytes(salt);
ICryptoTransform desencrypt = DES.CreateEncryptor();
byte[] encryptedData = desencrypt.TransformFinalBlock(plainData, 0, plainData.Length);
return encryptedData;
}
private string GetEncryptedKey(string key)
{
return BitConverter.ToString(KeyGeneratorForm.Encrypt(ASCIIEncoding.ASCII.GetBytes(key), "abcdefgh")).Replace("-", "");
}
Run Code Online (Sandbox Code Playgroud)
我正在尝试在PHP中执行相同的操作:
function get_encrypted_key($key){
$salt = "abcdefgh";
return bin2hex(mcrypt_encrypt(MCRYPT_DES, $salt, $key, MCRYPT_MODE_CBC, $salt));
}
Run Code Online (Sandbox Code Playgroud)
但是,结果中存在小的差异,因为最后16个字符总是不同的:
With key "Benjamin Franklin":
C# : 0B3C6E5DF5D747FB3C50DE952FECE3999768F35B890BC391
PHP: 0B3C6E5DF5D747FB3C50DE952FECE3993A881F9AF348C64D
With key "President Franklin D Roosevelt":
C# : C119B50A5A7F8C905A86A43F5694B4D7DD1E8D0577F1CEB32A86FABCEA5711E1
PHP: C119B50A5A7F8C905A86A43F5694B4D7DD1E8D0577F1CEB37ACBE60BB1D21F3F
Run Code Online (Sandbox Code Playgroud)
我还尝试使用以下代码对我的密钥执行填充转换:
function get_encrypted_key($key){ …Run Code Online (Sandbox Code Playgroud) 我试图建立一个SRTP以RTP数据流转换器,我有得到的问题Master Key从WebRTC peerconnection我创造.
根据我的理解,通过DES交换,密钥是通过交换进行的SDP交换,并在a=crypto现场显示.因此,这种情况看起来非常简单(如果我错了,请纠正我),但最终无用,因为WebRTC标准化现在要求不应使用DES(Chrome现在只支持它,将来可能会删除).
对于DTLS,指纹字段中SDP是否有希望在未来交换中使用的证书的哈希值?[编辑:做了一些阅读后,我认为情况并非如此]我会想到的是指纹旁边的能力,通过交换中的DTLS数据包解析我应该能够抓住Master Key解码SRTP流,但我正在撞墙,因为我不知道在哪里看,甚至100%确定它是否是可能.
因此,简而言之,就是它甚至是可行的(并不进入下C++ API和创建我自己的实现的WebRTC)的解码SRTP是与创造的原料WebRTC PeerConnection中Chrome和FireFox(从收集到的信息嗅探可能通过分组SDP交换)?[编辑:令人沮丧,似乎访问密钥(也称为主密钥)的私有部分是不可能的......请大家指正,如果我错]
我尝试使用pyDes和Crypto.Cipher.DES模块实现DES算法.我发现了一个问题,当我用82514145密钥加密然后解密密码93505044我可以检索解密的文本.我发现256个键表现得像这样.这违反了密码学.我的代码如下:
from Crypto.Cipher import DES
plain_text = 'asdfghij'
print 'plain Text: ', plain_text
des = DES.new('82514145', DES.MODE_ECB)
cipher_text = des.encrypt(plain_text)
print 'the cipher text is ', cipher_text
des = DES.new('93505044', DES.MODE_ECB)
print 'the decrypted text is: ', des.decrypt(cipher_text)
Run Code Online (Sandbox Code Playgroud)
输出是:
plain Text: asdfghij
the cipher text is @?Z????
the decrypted text is: asdfghij
Run Code Online (Sandbox Code Playgroud)
我的工作有什么不对吗?我也用pyDes得到了相同的结果.
根据维基百科,TripleDES支持56,112和168位密钥长度,但System.Cryptography.TripleDESCryptoServiceProvider.LegalKeySizes表示它只接受128和192位密钥长度.
我正在开发的系统需要可以互操作(我的代码加密的数据需要在PHP,Java和Objective-C中解密),在这种情况下我不是正确的.
那么我应该相信谁呢?我怎样才能确定我的加密数据是否可移植?
我正在使用ExoPlayer从设备的SD卡播放媒体文件(mp4s .h264编码).一些文件是DES加密的.我可以解密文件并返回一个inputStream,但后来我不确定如何使用ExoPlayer播放这个inputStream.任何帮助,将不胜感激.
protected void playVideo(File file) {
InputStream is;
if (file.getName().endsWith(".DES")) {
is = FileManager.decryptFile(file);
//what to do with this input stream?
}
Uri uri = Uri.parse(file.getAbsolutePath());
if (mPlayer != null) {
mPlayer.release();
}
mPlayer = new VideoPlayer(getRendererBuilder(uri));
mPlayer.addListener(this);
if (mLastPosition > 0) {
mPlayer.seekTo(mLastPosition);
}
mPlayer.prepare();
mPlayer.setSurface(mSurface);
mPlayer.setPlayWhenReady(true);
}
Run Code Online (Sandbox Code Playgroud) 我正在上计算机安全课程,我们的一项任务是对具有弱密钥的 DES 进行暴力破解。
我的代码:
public static void main(String[] args) throws Exception {
String temp;
String current;
String plaintext;
//Generate key for DES
String initkey = "00000006";
byte[] Rawkey = initkey.getBytes();
DESKeySpec dks = new DESKeySpec(Rawkey);
SecretKeyFactory skf = SecretKeyFactory.getInstance("DES");
SecretKey desKey = skf.generateSecret(dks);
//Text Enc & Dec
Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");
//Declare wether to enc or dec
cipher.init(Cipher.ENCRYPT_MODE,desKey);
byte []message = "Decrypted Successfully".getBytes();
byte []messageEnc = cipher.doFinal(message);
plaintext = new String(message);
System.out.println("Cipher Text: " + new String(messageEnc) );
for(int i=0;i<10;i++){ …Run Code Online (Sandbox Code Playgroud)