Tag: 加密

Blowfish在Java / Scala中加密并在bash中解密

我正在尝试构建一个工具来解密scala应用程序中加密的bash中的内容: 但首先,我要在两种语言中成功编码相同的消息并使它们相等: 鉴于密码“0123456789abcdef” (hex:“30313233343536373839616263646566”和字节[]:[48,49,50,51,52,53,54,55,56,57,97,98,99,100,101,102]) scala> import javax.crypto.Cipher scala> import javax.crypto.spec.SecretKeySpec scala> val cipher = Cipher.getInstance(“Blowfish”) scala> cipher.init(Cipher.ENCRYPT_MODE, new SecretKeySpec(“0123456789abcdef”.getBytes(“utf-8”), “Blowfish”)) scala> javax.xml.bind.DatatypeConverter.printBase64Binary(cipher.doFinal(“message”.getBytes(“utf-8”))) res7: String = K679Jz06jmc= 但我无法在bash中使用openssl重现相同的内容。 $ echo “message” | openssl enc -a -e -blowfish -nosalt -nopad -k “0123456789abcdef” LJ3iFJ2/mYk= $ echo “message” | openssl enc -a -e -blowfish -nosalt -nopad -k “30313233343536373839616263646566” JkkJgYv3fQg= […]

随机访问加密数据AES GCM模式

随机访问AES CTR模式有一个很好的例子,它可以工作: 在android中使用AES CTR模式随机访问InputStream private static final int AES_BLOCK_SIZE = 16; private static IvParameterSpec calculateIVForOffset(final IvParameterSpec iv, final long blockOffset) { final BigInteger ivBI = new BigInteger(1, iv.getIV()); final BigInteger ivForOffsetBI = ivBI.add(BigInteger.valueOf(blockOffset / AES_BLOCK_SIZE)); final byte[] ivForOffsetBA = ivForOffsetBI.toByteArray(); final IvParameterSpec ivForOffset; if (ivForOffsetBA.length >= AES_BLOCK_SIZE) { ivForOffset = new IvParameterSpec(ivForOffsetBA, ivForOffsetBA.length – AES_BLOCK_SIZE, […]

解密文件的内容时返回不同的字节

所以我决定扩展我在密码学方面的知识,但我有以下代码来加密文件的内容,然后解密它。 我的问题是,当我解密内容并比较我拥有的两个字节数组(原始和解密的内容)时,我有两个不同的数组,甚至是内容。 你们中的任何人都可以发现我的代码中可能有什么问题吗? 原始内容是基本64位解码字节数组。 public class KeyStoreHelper { public static byte[] decryptAES(FileInputStream fis, byte[] key) throws IOException { CipherInputStream cin = null; try { byte[] keyBytes = getKeyBytes(key); Cipher aesCipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, “AES”); IvParameterSpec ivParameterSpec = new IvParameterSpec(keyBytes); aesCipher.init(Cipher.DECRYPT_MODE, secretKeySpec, ivParameterSpec); byte[] buffer = new byte[1024]; ByteArrayInputStream cipherIn = new […]

加密在唯一文件中附加IVSBytes的文件 – 执行:给定最终块未正确填充

我正在尝试使用带有SHA-256密钥的AES加密文件。 当我生成IV时,我在加密文件的开始时预先加上它,然后追加其余的。 当我恢复IV并比较它(IV后的过程和后来的过程)它们是相同的。 问题是当我尝试解密文件时: javax.crypto.BadPaddingException:给定最终块未正确填充 我想这可能是因为我没有正确读取以下字节,但我修改了代码,看起来好了。 加密类: private static String password; private static String salt; private static int pswdIterations = 65536 ; private static int keySize = 256; private byte[] ivBytes; public void encryptOfFile(byte[] bytes, File out) throws Exception { byte[] saltBytes = salt.getBytes(“UTF-8”); System.out.println(“Salt bfre:” +salt); // Derive the key SecretKeyFactory factory = SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA1”); […]

从套接字创建密码流时应用程序死锁

我在两个套接字之间加密和解密我的流时遇到问题。 ObjectInputStream oIn = new ObjectInputStream(new FileInputStream(new File(“key”))); SecretKeySpec spec = (SecretKeySpec) oIn.readObject(); //’key’ file was saved previously Cipher cEncrypt = Cipher.getInstance(“AES”); cEncrypt.init(Cipher.ENCRYPT_MODE, spec); Cipher cDecrypt = Cipher.getInstance(“AES”); cDecrypt.init(Cipher.DECRYPT_MODE, spec); //should have no problems here, I tried the ciphers out by encoding and decoding a String, works fine ObjectOutputStream objectOutputStream= new ObjectOutputStream(new CipherOutputStream(socket.getOutputStream,cEncrypt)); objectOutputStream.flush(); ObjectInputStream […]

如何以编程方式生成自签名证书?

我有一个由HSM生成的RSA公钥(2048位),该密钥已保存在一个文件中(大小为256字节)并被编码为DER。 是否有可能以编程方式使用JDK API(没有BouncyCastle)从该文件开始创建自签名证书? 我坚持第一步,因为我正在尝试加载密钥文件来创建一个PublicKey对象: import java.io.FileInputStream; import java.security.KeyFactory; import java.security.PublicKey; import java.security.spec.PKCS8EncodedKeySpec; import org.apache.commons.io.IOUtils; public class Crypto { public static void main(String[] args) throws Exception { byte[] byteArray = IOUtils.toByteArray(new FileInputStream(“/tmp/pub.key”)); PKCS8EncodedKeySpec spec = new PKCS8EncodedKeySpec(byteArray); KeyFactory kf = KeyFactory.getInstance(“RSA”); PublicKey pub = kf.generatePublic(spec); …. } } 但我得到这个例外: Exception in thread “main” java.security.spec.InvalidKeySpecException: Only RSAPublicKeySpec […]

简单的密码加密 – 我该怎么办?

如何进行简单的密码加密才能进入数据库? 我需要这个来保住我的工作! 基本上我需要代码来执行以下操作: 编辑 我在我的本地PC上有一个名为“Usernames”的MySQL表。 它包含以下列: ID 用户名 密码 帐户类型 此表用于登录应用程序,我需要一种存储密码的安全方法。 有人可以帮忙吗?

尝试加密字符串时为什么会出现BadPaddingException?

我通过此链接创建了一个Encryption类来Encryption /解密我的Android项目中的二进制数据。 package com.my.package; import java.security.SecureRandom; import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec; // TODO Incomplete class public class Encryption { private static final byte[] salt = { (byte) 0xA4, (byte) 0x0B, (byte) 0xC8, (byte) 0x34, (byte) 0xD6, (byte) 0x95, (byte) 0xF3, (byte) 0x13 }; private static int BLOCKS = 128; private static byte[] […]

没有正确加密和解​​密

我写的以下AES类用于加密和解密,这有点时髦。 当我复制AES对象并且我选择加密纯文本,然后我立即尝试解密我刚刚加密的文本时,它不会完全解密(并且每次都有不同的方式)。 例如,我正在使用这样的简单JSP初始化它: <% String hexMessage = "0xe800a86d90d2074fbf339aa70b6d0f62f047db15ef04c86b488a1dda3c6c4f2f2bbb444a8c709bbb4c29c7ff1f1e"; String keyText = "12345678abcdefgh";//*/ AES e = new AES(); //e.setKey(keyText); String plaintext = "This should decode & encode!"; String ciphertext = e.encrypt(plaintext); out.println(ciphertext); out.println("”); out.println(e.decrypt(ciphertext)); %> 输出因页面加载而异:一次: 0x663D64E6A0AE455AB3D25D5AF2F77C72202627EBA068E6DEBE5F22C31 This should decoÁdìmèåV4ÉkÓ 另一个: 0x5F5CF31961505F01EA9D5B7D7BFC656BD3117725D2EA041183F48 This s2??XêêÈ&ÀܧF?ÒDÒ? 等等: 0xC7178A34C59F74E5D68F7CE5ED655B670A0B4E715101B4DDC2122460E8 Tà@¼R×ËÖ?_U?xÎÚ?Ba?b4r!©F 我创建的课程如下: package com.myclass.util; import java.io.UnsupportedEncodingException; import java.security.InvalidAlgorithmParameterException; import java.security.InvalidKeyException; […]

AES解密方法出错

我有解密的真正问题,不知道如何解决这个’java.crypto.BadPaddingException’。 我有一个类似的以前的系统工作得很好,现在我已经停止了上周。 我已经阅读了很多stackoverflow线程,但没有一个能真正解决我的问题…除非当然,我根本就不理解它。 我的问题出现在login方法中,它说: byte[] decrypted = cipher.doFinal(p.getBytes()); public void register() { // ENCRYPT PASSWORD try { String key = username; // 128bit key (16*8) String text = password; // CREATE KEY AND CIPHER Key aesKey = new SecretKeySpec(key.getBytes(), “AES”); Cipher cipher = Cipher.getInstance(“AES”); // ENCRYPT THE TEXT cipher.init(Cipher.ENCRYPT_MODE, aesKey); byte[] encrypted = cipher.doFinal(text.getBytes()); System.out.println(“Encrypted: […]