Tag: 加密

Bouncycastle PGP解密并validation

我正在尝试使用java BouncyCastle库解密和validationPGP消息,但遇到了问题,抱怨PartialInputStream的过早结束。 我知道加密工作正常,因为我可以在命令行上使用gpg解密和validation使用加密函数创建的消息。 这是代码: public static void signEncryptMessage(InputStream in, OutputStream out, PGPPublicKey publicKey, PGPPrivateKey secretKey, SecureRandom rand) throws Exception { out = new ArmoredOutputStream(out); PGPEncryptedDataGenerator encryptedDataGenerator = new PGPEncryptedDataGenerator(new BcPGPDataEncryptorBuilder(PGPEncryptedData.AES_256).setWithIntegrityPacket(true).setSecureRandom(rand)); encryptedDataGenerator.addMethod(new BcPublicKeyKeyEncryptionMethodGenerator(publicKey)); OutputStream compressedOut = new PGPCompressedDataGenerator(PGPCompressedData.ZIP).open(encryptedDataGenerator.open(out, 4096), new byte[4096]); PGPSignatureGenerator signatureGenerator = new PGPSignatureGenerator(new BcPGPContentSignerBuilder(publicKey.getAlgorithm(), HashAlgorithmTags.SHA512)); signatureGenerator.init(PGPSignature.BINARY_DOCUMENT, secretKey); signatureGenerator.generateOnePassVersion(true).encode(compressedOut); OutputStream finalOut = new PGPLiteralDataGenerator().open(compressedOut, […]

使用公钥端点validationJWT签名

我想validation微软的一些JWT的签名。 我正在使用Spring-Boot,JJWT库和以下端点: https ://login.microsoftonline.com/common/discovery/v2.0/keys 端点返回JSON公钥数组。 这是数组中的一个例子。 { “kty”: “RSA”, “use”: “sig”, “kid”: “9FXDpbfMFT2SvQuXh846YTwEIBw”, “x5t”: “9FXDpbfMFT2SvQuXh846YTwEIBw”, “n”: “kvt1VmR4nwkNM8jMU0wmj2gSS8NznbOt2pZI6Z7HQT_esF7W19GZR7Y72Xo1i5zXRDM9o3GeTIjBrnr3yy41Q_EaUQ7C-b-Hmg94Vy7EBZyBhi_mznz0dYWs2MIXwR86Nni9TmgTXvjgTPF2YGJoZt4TwcMFefW8rijCVyNrCBA0XspDouNJavvG0BEMXYigoThFjLRXS5U3h4BDfNZFZZS3dyliNOXfgRn2k7oITz8h_ueiPvmDRFh38AeQgx1cELhKWc3P5ugtttraSwgH7nP2NUguO9nCrHuL6TZ-KWpmRWZqwH-jYKFQVt3CDpzwNM6XJL-oHbl1x-gI3YYX5w”, “e”: “AQAB”, “x5c”: [ “MIIDBTCCAe2gAwIBAgIQZSAeaqWig4BHC1ksmNNcgjANBgkqhkiG9w0BAQsFADAtMSswKQYDVQQDEyJhY2NvdW50cy5hY2Nlc3Njb250cm9sLndpbmRvd3MubmV0MB4XDTE3MDUwNjAwMDAwMFoXDTE5MDUwNzAwMDAwMFowLTErMCkGA1UEAxMiYWNjb3VudHMuYWNjZXNzY29udHJvbC53aW5kb3dzLm5ldDCCASIwDQYJKoZIhvcNAQEBBQADggEPADCCAQoCggEBAJL7dVZkeJ8JDTPIzFNMJo9oEkvDc52zrdqWSOmex0E/3rBe1tfRmUe2O9l6NYuc10QzPaNxnkyIwa5698suNUPxGlEOwvm/h5oPeFcuxAWcgYYv5s589HWFrNjCF8EfOjZ4vU5oE1744EzxdmBiaGbeE8HDBXn1vK4owlcjawgQNF7KQ6LjSWr7xtARDF2IoKE4RYy0V0uVN4eAQ3zWRWWUt3cpYjTl34EZ9pO6CE8/If7noj75g0RYd/AHkIMdXBC4SlnNz+boLbba2ksIB+5z9jVILjvZwqx7i+k2filqZkVmasB/o2ChUFbdwg6c8DTOlyS/qB25dcfoCN2GF+cCAwEAAaMhMB8wHQYDVR0OBBYEFGKpXQNrF5IoxS6bL4F92+gxOJlIMA0GCSqGSIb3DQEBCwUAA4IBAQA3HgW5SoHlvvQVxqqi+mtscDZLhNfe13iG/nx8Er5il82b79RVydNs+f9sYxc4T4ctnrZu7x5e7jInJedNdAlrPorBdw+SfvKJsmiNndXugMew1FlcQTQVIFDCbziaJav8rKyMxPfeKkc1aixbajWZkKg6OPmmJn2ceTocbn8PMQy20xNvcWUwgF5FZZIuPqu6feOLJcUIYw+0JFZ265xka30QXpmytcIxajIzpD4PRdCIBuVSqgXacAs4t4+w+OhnosD72yvXck8M4GwX1j+vcuyw0yhDGNMmqsHWP7H3jnJiGDrKhhdVyplzDhTfv2Whbv/dIDn+meLE3yyC5yGL” ], “issuer”: “https://login.microsoftonline.com/{tenantid}/v2.0” } 在JJWT中,我实现了SigningKeyResolver接口,我需要返回一个RSAPublicKey实例来进行validation。 我遇到的问题是从JSON正确创建密钥。 我是从模数和指数开始的吗? BigInteger modulus = new BigInteger(1, Base64.decodeBase64(jsonKey.getN())); BigInteger exponent = new BigInteger(1, Base64.decodeBase64(jsonKey.getE())); publicKey = KeyFactory.getInstance(“RSA”).generatePublic(new RSAPublicKeySpec(modulus, exponent)); 我是从x5c开始,生成X509Certificate对象并从那里拉出PublicKey吗? CertificateFactory factory = CertificateFactory.getInstance(“X.509”); X509Certificate cert = (X509Certificate) […]

加密战争文件

我想加密或混淆我的WAR文件,以便逆向工程将需要更多的努力。 是否有这样的工具或maven插件会加密WAR文件及其内容? 此外,一旦WAR加密,那么Web应用程序将如何部署? 如果Web服务器爆炸WAR,每个jar和资源是否仍然可以加密,如何修改启动行为以解密嵌套的jar和资源? 谢谢,沃尔特

Java加密与硬编码密钥交替

我是加密新手。 我查看了javax.crypto文档,并使用此代码对文件进行加密… File saveFile = new File(“Settings.set”); saveFile.delete(); FileOutputStream fout = new FileOutputStream(saveFile); //Encrypt the settings //Generate a key byte key[] = “My Encryption Key98”.getBytes(); DESKeySpec desKeySpec = new DESKeySpec(key); SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(“DES”); SecretKey skey = keyFactory.generateSecret(desKeySpec); //Prepare the encrypter Cipher ecipher = Cipher.getInstance(“DES”); ecipher.init(Cipher.ENCRYPT_MODE, skey); // Seal (encrypt) the object SealedObject so = […]

返回字节数组时出错

我使用以下代码 public byte[] encrypt(byte[] unencryptedString,String k)throws Exception { String encryptedString = null; String k1 = String.format(“%024d”, Integer.parseInt(k)); myEncryptionKey = k1; myEncryptionScheme = DESEDE_ENCRYPTION_SCHEME; arrayBytes = myEncryptionKey.getBytes(UNICODE_FORMAT); ks = new DESedeKeySpec(arrayBytes); skf = SecretKeyFactory.getInstance(myEncryptionScheme); cipher = Cipher.getInstance(myEncryptionScheme); key = skf.generateSecret(ks); try { cipher.init(Cipher.ENCRYPT_MODE, key); byte[] plainText = unencryptedString/*.getBytes(UNICODE_FORMAT)*/; byte[] encryptedText = cipher.doFinal(plainText); // encryptedString = new […]

Android加密API不会为AES生成安全IV

我正在使用javax.crypto在我的应用程序中执行一些加密操作。 我使用AES进行加密/解密,如下所示: Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); SecretKeySpec keySpec = new SecretKeySpec(keyBytes, “AES”); cipher.init(Cipher.ENCRYPT_MODE, keySpec); byte[] cipherText = cipher.doFinal(plaintext); byte[] iv = cipher.getIV(); //The problematic IV 在加密之后,生成的IV被预先附加到密文。 Java规范明确指出,如果未向cipher.init()提供IV,则必须自动生成IV: 如果此密码需要任何无法从给定密钥派生的算法参数,则底层密码实现应该自己生成所需的参数(使用特定于提供程序的默认值或随机值) 但有时我最终会得到一些似乎不是很随机的密文,比如这个(在base64中): AAAAAAAAAAAAAAAAAAAAAOmI9Qh1fMiG6HV3tKZK3q5sCruaPdYqYnoUOM00rs6YZY3EvecYfR6vTHzZqk7ugknR9ZMipedYWJB1YOLmSYg= 前面的一堆A字符是IV。 IV实际上是16个零字节。 大多数情况下,库会生成适当的随机IV,但有时候,它会弹出零。 为什么会这样?

将硬编码文件解密为byte

那么这实际上是两个人…… 首先我需要 读取文件的内容 将它们加密成一个byte[] 将byte[]写入文件或其他内容…… 然后#2或#3的结果将进入另一个项目。 我正在努力保护我们的PEM / DER键。 对于解密,我需要 以byte[]读取加密文件的内容 将它们解密为byte[] 将解密的数据写入文件或使用它而不是文件 现在,我有一些基本的加密代码 KeyGenerator keyGenerator = KeyGenerator.getInstance(“AES”); keyGenerator.init(128); // 192 and 256 bits may not be available SecretKey secretKey = keyGenerator.generateKey(); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); // By initializing the cipher in CBC mode, an “initialization vector” has been randomly // generated. This initialization vector […]

Android – 在解密中删除填充的位

我正在使用我自己的自定义加密方法处理安全应用程序,并且在解密消息时遇到问题。 根据该理论,必须填充输入以满足执行加密所需的位。 但填充的位在解密后仍保持不变。 这是一个例子: input (before padding) : q input (after padding) : 113 0 0 0 0 0 0 0 (in Bytes) 然后我执行一些代码: bytes[] a = encrypt(input); bytes[] b = decrypt(a); String output = “”; output = new String(b, “UTF-8”); System.out.println上的输出如下: b : 113 0 0 0 0 0 0 0 output : q[][][][][][][] […]

RSA加密Javascript和Decrypt Java

用不同的组合花了差不多2天。我在java中使用RSA算法生成一个非对称密钥对(公共和私有),并试图在javascript中使用公钥来加密一些文本并在服务器端的java中解密。 尝试解密在javascript中加密的字符串时,我收到“javax.crypto.IllegalBlockSizeException:数据不能超过128个字节”exception。 会感激一些帮助…… 使用这个Javascript库加密。 https://github.com/wwwtyro/cryptico var publicKeyString =“”//在java中生成的base64encoded公钥字符串 这是我的javascript代码 var EncryptionResult = cryptico.encrypt(“somestring”, publicKeyString); console.log(“Encrypted status-“+EncryptionResult.status); console.log(“Encrypted String-“+EncryptionResult.cipher); 它成功加密了字符串。 Java密钥生成和解密 Cipher cipher = Cipher.getInstance(“RSA”); KeyFactory fact = KeyFactory.getInstance(“RSA”); KeyPairGenerator keyPairGenerator = KeyPairGenerator.getInstance(“RSA”); keyPairGenerator.initialize(1024); // 1024 used for normal KeyPair keyPair = keyPairGenerator.generateKeyPair(); PublicKey publicKey = keyPair.getPublic(); PrivateKey privateKey = keyPair.getPrivate(); FileOutputStream fos = null; ObjectOutputStream […]

AES CBC PKCS5Padding Java到Ruby

我在java和ruby之间传递加密数据时遇到了麻烦。 Java => Java工作正常Ruby => Ruby工作正常Ruby => Java工作得很好Java => Ruby不起作用(错误:错误的最终块长度)。 在java中,我使用此代码加密数据,然后将其发布到rails服务器密钥大小 static public synchronized String encryptAesData(Context pContext, String pData, byte[] pKey, byte[] pIv) { Log.d(“”, “key size iv size “); //key size iv size AlgorithmParameterSpec paramSpec = new IvParameterSpec(pIv); SecretKeySpec key = new SecretKeySpec(pKey, “AES”); Cipher cipher = Cipher.getInstance(“AES/CBC/PKCS5Padding”); cipher.init(Cipher.ENCRYPT_MODE, key, paramSpec); byte[] encrypted = […]