我编写的每个使用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) 我是加密新手.我需要实现非对称加密算法,我认为它使用私钥/公钥.我开始使用RSACryptoServiceProvider的示例.加密的小数据是可以的.但是当在相对较大的数据"2行"上使用它时,我得到异常CryptographicException"Bad Length"!
//Create a new instance of RSACryptoServiceProvider.
using (RSACryptoServiceProvider RSA = new RSACryptoServiceProvider())
{
//Import the RSA Key information. This only needs
//toinclude the public key information.
//RSA.ImportParameters(RSAKeyInfo);
byte[] keyValue = Convert.FromBase64String(publicKey);
RSA.ImportCspBlob(keyValue);
//Encrypt the passed byte array and specify OAEP padding.
//OAEP padding is only available on Microsoft Windows XP or
//later.
encryptedData = RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
}
Run Code Online (Sandbox Code Playgroud)
然后我找到了一些使用CryptoStream加密大数据(或文件)的样本,并且只使用DES或3DES等对称算法,它们具有CreateEncryptor函数,将ICryptoTransform作为CryptoStream构造函数的输入之一返回!
CryptoStream cStream = new CryptoStream(fStream,
new TripleDESCryptoServiceProvider().CreateEncryptor(Key, IV),
CryptoStreamMode.Write);
Run Code Online (Sandbox Code Playgroud)
使用RSA加密文件的方法是什么?
下面的代码在c#.NET中运行良好
byte[] key = Encoding.ASCII.GetByte("012345678901234567890123"); //24characters
byte[] plainText = Encoding.ASCII.GetBytes("lasaa");
TripleDES des = TripleDES.Create();
des.Key = key;
des.Mode = CipherMode.CBC;
ICryptoTransform ic = des.CreateEncryptor();
byte[] enc = ic.TransformFinalBlock(plainText, 0, plainText.Length);
MessageBox.Show(UTF8Encoding.UTF8.GetString(enc));
Run Code Online (Sandbox Code Playgroud)
我对上述问题是......
des.KeySize= 128或192或256它给指定的密钥不是此算法的有效大小
指定的密钥不是此算法的有效大小
我想知道为什么会这样?
对于给定的$ key,$ message和$ iv,我有这个mcrypt_encrypt调用:
$string = mcrypt_encrypt(MCRYPT_3DES, $key, $message, MCRYPT_MODE_CBC, $iv);
Run Code Online (Sandbox Code Playgroud)
我想将mcrypt_encrypt呼叫改为$key一个,以便将来证明这一点.
通过具有$message或$iv和mcrypt_encrypt我得到的更多的类似的反应,但不完全相同.还有其他方法可以称之为完美匹配吗?
我正在为lorem-ipsum openssl_encrypt+ $mode = 'des-ede3-cbc'组合得到这个(base64_encoded),所以我开始相信一个函数或另一个函数在加密前稍微填充消息...
对于mcrypt
"Y + JgMBdfI7ZYY3M9lJXCtb5Vgu + rWvLBfjug2GLX7uo ="
为了openssl
"Y + JgMBdfI7ZYY3M9lJXCtb5Vgu + rWvLBvte4swdttHY ="
尝试使用$ options传递OPENSSL_ZERO_PADDING,但传递除1 之外的任何内容(OPENSSL_RAW_DATA或true)会导致空字符串...
既不使用$mode = '3DES';也不$options = true工作... :(
还有其他线索吗?我正在使用"OpenSSL 1.0.2g 2016年3月1日".
已经读过这个 q&a,但它对我没有帮助.不是唯一 一个有填充问题的人,但到目前为止还没有解决方案.(第二个答案谈到添加填充到mcrypt调用,我真的想从openssl加密调用中删除填充...
python中使用des/3des进行加密/解密的最佳模块/包是什么.有人可以提供示例来使用python上的des/3des加密数据.
我已经编写了一个DES实现作为练习,我现在想知道今天是否使用(三重)DES.
我已经读过使用它的银行卡,但我找不到任何可靠的来源.
我想创建一个C#类来解密使用T-SQL的EncryptByPassPhrase加密的字节数组.(是的,我知道我可以在SQL Server中解密,但我需要的是能够在数据库层和中间层中等效加密/解密.)
据我所知,SQL Server的EncryptByPassPhrase和DecryptByPassPhrase使用TripleDES对称密钥算法.但是,我不清楚IV应该模拟SQL Server的密码学.我可以使用TripleDESCryptoServiceProvider类加密/解密,但是我找不到正确的key和IV实现来复制SQL Server正在做的事情.
有没有人做过类似的事情?谢谢!
对于
`BDK = "0123456789ABCDEFFEDCBA9876543210"` `KSN = "FFFF9876543210E00008"`
Run Code Online (Sandbox Code Playgroud)
生成的密文如下
"C25C1D1197D31CAA87285D59A892047426D9182EC11353C051ADD6D0F072A6CB3436560B3071FC1FD11D9F7E74886742D9BEE0CFD1EA1064C213BB55278B2F12"`
Run Code Online (Sandbox Code Playgroud)
我在这里找到了.我知道这个密文是基于BDK和KSN但是如何生成这个128长度的密文?它涉及的步骤或用于此的算法是什么?有人可以通过简单的步骤解释.我发现很难理解我用google搜索时得到的文件.
在Ruby中计算字节是否具有奇数或偶数奇偶校验的最佳方法是什么?我有一个版本工作:
result = "AB".to_i(16).to_s(2).count('1').odd?
=> true
Run Code Online (Sandbox Code Playgroud)
将数字转换为字符串并计算"1"似乎是计算奇偶校验的一种不好的方法.有更好的方法吗?
我希望能够计算3DES密钥的奇偶校验.最终,我想将偶数字节转换为奇数.
谢谢,丹
我有一个PHP服务器,它使用CFB模式解密3DES中的数据
我用PHP加密:
$montant = "500";
$message_crypte = mcrypt_encrypt(MCRYPT_3DES, "N4y1FRDRJ7wn7eJNnWaahCIS", $montant, ,CRYPT_MODE_CFB, "NCNPJDcR");
$montant = base64_encode($message_crypte);
Run Code Online (Sandbox Code Playgroud)
PHP中的这个脚本可以和其他系统一起使用.
我想用Java加密:
public class CryptData {
private KeySpec keySpec;
private SecretKey key;
private IvParameterSpec iv;
public CryptData(String keyString, String ivString) {
try {
final MessageDigest md = MessageDigest.getInstance("md5");
final byte[] digestOfPassword = md.digest(Base64
.decodeBase64(keyString.getBytes("ISO-8859-1")));
final byte[] keyBytes = Arrays.copyOf(digestOfPassword, 24);
for (int j = 0, k = 16; j < 8;) {
keyBytes[k++] = keyBytes[j++];
}
//keySpec = new DESedeKeySpec(keyBytes);
keySpec = new DESedeKeySpec(keyString.getBytes());
key …Run Code Online (Sandbox Code Playgroud) 3des ×10
encryption ×5
c# ×3
cryptography ×3
des ×2
java ×2
mcrypt ×1
openssl ×1
parity ×1
php ×1
php-openssl ×1
python ×1
rsa ×1
ruby ×1
sql ×1