Tag: 3des

3DES解密错误密钥长度无效

我正在使用3DESC解密数据,但我得到以下exception java.security.InvalidKeyException: Invalid key length: 16 bytes 我的代码: public static byte[] decrypt3DESCBC(byte[] keyBytes, byte[] ivBytes, byte[] dataBytes) { try { AlgorithmParameterSpec ivSpec = new IvParameterSpec(ivBytes); SecretKeySpec newKey = new SecretKeySpec(keyBytes, “DESede”); Cipher cipher = Cipher.getInstance(“DESede/CBC/NoPadding”); cipher.init(Cipher.DECRYPT_MODE, newKey, ivSpec); // Causes Exception return cipher.doFinal(dataBytes); } catch (Exception e) { e.printStackTrace(); } return null; } 打印上面使用的所有字节数组 keyBytes […]

Java Triple DES加密,带有2个不同的密钥

我正在尝试使用具有两个不同密钥的三重DES来加密数据,因此给定两个密钥k1和k2,密码文本将是Ek1(Dk2(Ek1(明文)))其中E是加密和D解密。 我正在尝试使用Java中的DES算法来模拟这个。 这是代码: public static void main(String[] args) { SecretKey k1 = generateDESkey(); SecretKey k2 = generateDESkey(); String firstEncryption = desEncryption(“plaintext”, k1); String decryption = desDecryption(firstEncryption, k2); String secondEncryption = desEncryption(decryption, k1); } public static SecretKey generateDESkey() { KeyGenerator keyGen = null; try { keyGen = KeyGenerator.getInstance(“DES”); } catch (NoSuchAlgorithmException ex) { Logger.getLogger(Test.class .getName()).log(Level.SEVERE, null, […]

解密Python中用3DES加密的数据

我正在尝试使用PyCrypto解密数据。 数据使用javax.crypto包以Java编码。 加密是Triple DES(在Java中称为“ DESede ”)。 据我所知,默认设置用于一切。 但是,当我在Python中解密数据时,数据总是存在问题。 这是加密/解密的Java代码: import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import java.security.spec.KeySpec; public final class Encrypter { public static final String DESEDE_ENCRYPTION = “DESede”; private KeySpec keySpec; private SecretKeyFactory keyFactory; private Cipher cipher; private static final String UNICODE_FORMAT = “UTF8”; public Encrypter(String encryptionKey) throws […]

使用3DES加密字符串时出现NoSuchProviderException

我是Java新手。 我遵循本教程使用3DES算法进行加密和解密。 我这样实现了: 创建了一个类并放置了上面链接中提供的3DES代码。 在上面的链接中调用加密方法如下: String encryptedPassword = Encrypter.encrypt(edtText.getText().toString()); 我在logcat中得到exception,如下所示: 05-02 15:19:10.804: W/System.err(4445): java.security.NoSuchProviderException: Provider not available: SunJCE 05-02 15:19:10.820: W/System.err(4445): at javax.crypto.Cipher.getInstance(Cipher.java:209) 05-02 15:19:10.820: W/System.err(4445): at com.example.utilities.Encrypter.encrypt(Encrypter.java:46) 05-02 15:19:10.820: W/System.err(4445): at com.example.screens.RegisterScreen.onClick(RegisterScreen.java:152) 05-02 15:19:10.820: W/System.err(4445): at android.view.View.performClick(View.java:2485) 05-02 15:19:10.820: W/System.err(4445): at android.view.View$PerformClick.run(View.java:9080) 05-02 15:19:10.828: W/System.err(4445): at android.os.Handler.handleCallback(Handler.java:587) 05-02 15:19:10.828: W/System.err(4445): at android.os.Handler.dispatchMessage(Handler.java:92) 05-02 15:19:10.828: […]

PKCS11 deriveKey()和encrypt()返回3DES的不同结果

我正在使用HSM和PKCS11处理密钥派生问题,目前我无法理解为什么我看到完全不同的结果取决于我是否使用deriveKey()方法而不是使用encrypt()方法。 在这两种情况下,我都试图使用DESede / ECB / NoPadding算法来获得结果,但是根据我用来生成结果的方法(deriveKey与加密),我看到了不同的结果。 退一步以提供高级概述……我正在使用Global Platform使用的特定密钥派生方法来使用于智能卡的主密钥多样化。 该方法以主密钥和用于导出新密钥的8字节数据(多样化数据)开始。 div数据字节实际上只是使用DESede / ECB / NoPadding用主密钥加密,结果用作新导出的3DES密钥的一部分。 (实际上,执行了多次加密,并将结果连接在一起形成新密钥,但这不是问题。) 我在两种情况下都validation了主密钥,validation了两种情况下的多样化数据是相同的,validation了我使用相同的算法和相同的填充。 我也尝试将派生密钥模板更改为DES,2DES,3DES。 所有产生的结果都相似,只是长度不同。 目前我已经使用IAIK包装器(用Java编写的pkcs11包装器)实现了我的测试用例,我将在此处发布。 密钥只是一个测试密钥,div数据是样本div数据,因此这里没有敏感信息。 我首先在HSM中创建基本密钥,然后尝试使用多样化数据调用session.deriveKey()来获取新密钥。 派生的关键字节以hex打印(键值不正确,基于我当前工作的实现,它在内存中而不是在HSM中导出密钥)。 接下来,我只是初始化会话以使用主密钥执行加密,然后加密多样化数据。 这产生了预期值(再次根据工作实现进行检查)。 当我使用相同的基本密钥,相同的div数据和相同的加密算法时,我正在寻找的是对这些操作产生不同结果的原因的任何了解。 我不明白deriveKey()在表面下做了什么,我无法找到任何文档或源代码来解释这一点。 我必须能够使用deriveKey()方法,因为派生密钥在HSM之外不可用。 有任何见解赞赏。 Mechanism keyGenerationMechanism = Mechanism.get(PKCS11Constants.CKM_DES3_KEY_GEN); List supportedMechanisms = Arrays.asList(token.getMechanismList()); if (!supportedMechanisms.contains(Mechanism.get(PKCS11Constants.CKM_DES3_KEY_GEN))) { output_.println(“Mechanism not supported: DES3_KEY_GEN”); return; } // This is the master key that I want to […]

如何在Android上使用3DES算法?

在服务器端,密码字段的加密/解密在C#中完成。 现在,我需要在我的Android应用程序中实现相同的function。 所以,我按照本教程: http : //ttux.net/post/3des-java-encrypter-des-java-encryption/如下: import java.security.MessageDigest; import java.security.spec.KeySpec; import java.util.Arrays; import javax.crypto.Cipher; import javax.crypto.SecretKey; import javax.crypto.SecretKeyFactory; import javax.crypto.spec.DESedeKeySpec; import javax.crypto.spec.IvParameterSpec; import org.apache.commons.codec.binary.Base64; public class Encrypter { private KeySpec keySpec; private SecretKey key; private IvParameterSpec iv; public Encrypter(String keyString, String ivString) { try { final MessageDigest md = MessageDigest.getInstance(“md5”); final byte[] digestOfPassword = md.digest(Base64.decodeBase64(keyString.getBytes(“utf-8”))); […]

Java TripleDESCryptoServiceProvider等效于Java

拜托,请不要问我为什么。 我只是在.NET中使用此代码来加密/解密数据字符串。 我现在需要在java中制作“完全”相同的function。 我已经为DESede crypt尝试了几个例子,但它们都没有给出与.net中这个类相同的结果。 我甚至在ssl后面制作一个.net webserbvice来服务于.net写的这两种方法但是如果不用尽所有的可能性就太愚蠢了。 也许你们中的一些在这个领域更有相关性的java人将会在你们的头脑中如何制作它。 谢谢 !!! public class Encryption { private static byte[] sharedkey = {…}; private static byte[] sharedvector = {…}; public static String Decrypt(String val) { TripleDESCryptoServiceProvider tdes = new TripleDESCryptoServiceProvider(); byte[] toDecrypt = Convert.FromBase64String(val); MemoryStream ms = new MemoryStream(); CryptoStream cs = new CryptoStream(ms, tdes.CreateDecryptor( sharedkey, sharedvector ), […]

PHP等效于Java Triple DES加密/解密

我试图使用PHP mcrypt函数解密由Java Triple DES函数加密的密钥,但没有运气。 在下面找到java代码 import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class Encrypt3DES { private byte[] key; private byte[] initializationVector; public Encrypt3DES(){ } public String encryptText(String plainText, String key) throws Exception{ //—- Use specified 3DES key and IV from other source ————– byte[] plaintext = plainText.getBytes(); byte[] myIV = key.getBytes(); byte[] tdesKeyData = {(byte)0xA2, […]