Tag: 加密

存储/恢复加密密钥以便在java中解密字符串的简便方法

对于加密我使用这样的东西: SecretKey aesKey = KeyGenerator.getInstance(“AES”).generateKey(); StringEncrypter aesEncrypt = new StringEncrypter(aesKey, aesKey.getAlgorithm()); String aesEncrypted= aesEncrypt.encrypt(StringContent); 如果我打印出aesKey,我会得到:“javax.crypto.spec.SecretKeySpec@1708d”。 因此,对于加密,我想问用户密钥,但不知道它应该是什么格式。 我的计划是这样的: SecretKey aesKey = javax.crypto.spec.SecretKeySpec@1708d; StringEncrypter aesEncrypt = new StringEncrypter(aesKey, aesKey.getAlgorithm()); String aesDecrypt = aesEncrypt.decrypt(aesEncrypted); 但似乎它不起作用。 是否有一些简单的方法可以在加密后将密钥打印到控制台,以便用户可以保存(或记住它)然后用于解密? 整个代码在这里: 无法解密来自文本文件,对称密钥工具的密文。 在java所以我很抱歉再次发布但我不确定如果代码甚至可读(我是新手)。

将Java的PBEWithMD5AndDES转换为JavaScript

我正在尝试用JavaScript复制Java代码。 下面是我的Java代码: public static String encrypt(String input) final byte[] SALT= { (byte) 0x21, (byte) 0x21, (byte) 0xF0, (byte) 0x55, (byte) 0xC3, (byte) 0x9F, (byte) 0x5A, (byte) 0x75 }; final int ITERATION_COUNT = 31; { if (input == null) { throw new IllegalArgumentException(); } try { KeySpec keySpec = new PBEKeySpec(null, SALT, ITERATION_COUNT); AlgorithmParameterSpec paramSpec = […]

如何在java加密中将位插入块中?

我正在尝试制作一个涉及加密的简单Java程序。 首先,我从文件clearmsg.txt中读取一个32字节的块。 然后我将此块转换为整数,并将其用于加密。 不幸的是,密文的大小不是静态的; 有时它返回30个字节,有时返回26个字节。 这似乎与添加操作的结果无关。 如何确保它成为32字节的密码块? 如何向这个块添加位/字节? 因为当我尝试解密这个块时,我需要读取32个密文字节。 private void ENC_add() { final File clearmsg = new File(“F:/java_projects/clearmsg.txt”); final File ciphermsg = new File(“F:/java_projects/ciphermsg.txt”); final byte[] block = new byte[32]; try { final FileInputStream fis = new FileInputStream(clearmsg); final FileOutputStream fcs = new FileOutputStream(ciphermsg); int i; while ((i = fis.read(block)) != -1) { // […]

相当于java中的OpenSSL命令

我对java或openssl中的文件加密并不是很熟悉。 我从学校了解基础知识但从未实际实施过。 现在我已经获得了以下3个命令: //generate random base64 private key openssl rand -base64 32 -out (keypath) //Encrypt random key with public key openssl rsautl -encrypt -inkey (encryptionkey) -pubin -in (input) -out (output) //encrypt file openssl enc -aes-256-cbc -salt -in (input) -out (output) -pass file:(keypath) 我需要在java中完全复制它。 有这么简单的方法吗? 我可以使用哪个库让这更容易吗? 对于第一行,我使用java 7中的SecureRandom函数生成一个字节数组,然后使用apache commons编解码器库将其加载到base64。 像这样: byte[] bytes = new byte[32]; new […]

替换密码与不同的字母长度

我想实现一个简单的替换密码来掩盖URL中的私有ID。 我知道我的ID会是什么样子(大写ASCII字母,数字和下划线的组合),它们会很长,因为它们是组合键。 我想使用更长的字母来缩短生成的代码(我想使用大写和小写的ASCII字母,数字和其他内容)。 所以我输入的字母表就是 [A-Z0-9_] (37 chars) 而我的外传字母表将是 [A-Za-z0-9] (62 chars) 因此可以获得几乎50%合理压缩量的压缩。 假设我的url如下所示: /my/page/GFZHFFFZFZTFZTF_24_F34 而我希望它们看起来像这样: /my/page/Ft32zfegZFV5 显然,两个数组都会被洗牌以带来一些随机顺序。 这不一定是安全的。 如果有人弄清楚:很好,但我不希望这个计划显而易见。 我想要的解决方案是将字符串转换为基数37的整数表示,将基数转换为62并使用第二个字母表来写出该数字。 是否有任何类似的示例代码? Integer.parseInt()具有一些类似的逻辑,但它使用标准数字行为进行硬编码。 有任何想法吗? 我使用Java来实现这一点,但任何其他语言的代码或伪代码当然也很有帮助。

使用Java中的BigIntegers进行BitShifting

我正在使用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:111100011110011001101010101000000000000000000000000000000 c14:1111010101010011001100001111000000000000000000000000000 d14:1111000111100110011010101010000000000000000000000000000 c15:11110101010100110011000011110000000000000000000000000000 d15:111100011110011001101010101000000000000000000000000000000000

尝试安全连接到服务器时,Java“没有共同的密码套件”问题

当客户端(不是我的)安全地连接到我的服务器时,我遇到了问题。 似乎连接因不匹配的密码而被拒绝,但我已经validation服务器确实与客户端共享一些密码。 这可能是未知密码的问题(未知0x0:0x60)? 如果是这样,我该怎么做才能解决它? Java SSL日志如下所示: Listener-https, setSoTimeout(30000) called Worker-30, READ: SSLv3 Handshake, length = 63 *** ClientHello, SSLv3 RandomCookie: GMT: 1267050437 bytes = { 23, 244, 228, 68, 161, 225, 218, 222, 207, 128, 228, 138, 127, 141, 159, 63, 232, 48, 242, 240, 26, 76, 58, 158, 179, 0, 192, 140 } Session […]

使用JAVA使用AES加密大文件

我用低于此值的文件(10mb,100mb,500mb)测试了我的代码,加密工作正常。 但是,我遇到了大于1GB的文件的问题。 我已经生成了一个大文件(大约2GB),我想用AES使用JAVA加密它,但我遇到了这个错误: “线程中的exception”主“java.lang.OutOfMemoryError:Java堆空间” 我尝试使用-Xmx8G增加可用内存,但没有骰子。 我的部分代码如下 File selectedFile = new File(“Z:\\dummy.txt”); Path path = Paths.get(selectedFile.getAbsolutePath()); byte[] toencrypt = Files.readAllBytes(path); byte[] ciphertext = aesCipherForEncryption.doFinal(toencrypt); FileOutputStream fos = new FileOutputStream(selectedFile.getAbsolutePath()); fos.write(ciphertext); fos.close(); 据我所知,它的行为方式是,它试图立即读取整个文件,加密它,并将其存储到另一个字节数组中,而不是缓冲和流式传输。任何人都可以帮助我有一些代码提示? 我是编码的初学者,所以我真的不太了解,任何帮助都将受到赞赏。

Java安全性 – MSCAPI提供者:如何在没有密码弹出的情况下使用?

我已经设法在我的应用程序中使用Sun的MSCAPI提供程序。 我现在遇到的问题是它总是弹出一个窗口,要求输入密码,即使我已经在代码中提供了密码。 这是一个问题,因为我需要在Web服务中使用加密function。 这是我现在的代码: String alias = “Alias to my PK”; char[] pass = “MyPassword”.toCharArray(); KeyStore ks = KeyStore.getInstance(“Windows-MY”); ks.load(null, pass); Provider p = ks.getProvider(); Signature sig = Signature.getInstance(“SHA1withRSA”,p); PrivateKey key = (PrivateKey) ks.getKey(alias, pass) sig.initSign(key); sig.update(“Testing”.getBytes()); sig.sign(); 这工作得很好,但是在最后一行运行时我得到一个弹出窗口询问密码。 我该如何预防呢?

Java中PHP的crypt函数的等价物

我正在将我的PHP代码迁移到Google App Engine – Java。 所以我需要Java中相当于PHP的crypt函数, 因为我已经存储了注册用户的所有密码 在我的数据库中使用crypt。 编辑1 :这是我加密密码的PHP代码: $ password =“test123”; $ pwd = crypt($ password,$ password); echo $ pwd; 输出是(在Windows上以及HostMonser上的基于Linux的服务器): temjCCsjBECmU 有人能给我相同的java代码吗? 我尝试了各种排列和组合 MessageDigest类,但无法正确使用.. 编辑2 : 以下是我认为可以使用的示例代码,但没有: try { { String password = “test123”; MessageDigest digest = MessageDigest.getInstance( “MD5” ); byte[] passwordBytes = password.getBytes( ); digest.reset( ); digest.update( passwordBytes ); digest.update( passwordBytes […]