猿问

如何在Java中加密字符串

如何在Java中加密字符串

我需要的是加密字符串,这将显示在2D条形码(PDF-417),所以当有人有一个想法来扫描它将没有任何可读性。

其他所需经费:

  • 不应该很复杂
  • 它不应由RSA、PKI基础设施、密钥对等组成。

它必须足够简单,以摆脱人们四处窥探,并易于解密,其他公司有兴趣获得这些数据。他们打电话给我们,我们告诉他们标准或给他们一些简单的密钥,然后可以用来解密。

也许这些公司可以使用不同的技术,所以最好坚持一些标准,而这些标准并不与某些特殊的平台或技术挂钩。

你有什么建议?是否有一些Java类正在执行encrypt() & decrypt()在达到高安全标准的过程中没有太多的复杂性?


慕哥6287543
浏览 1574回答 3
3回答

喵喔喔

我建议使用一些广泛可用的标准对称密码,如DES, 3 DES或俄歇..虽然这不是最安全的算法,但是有大量的实现,您只需要将密钥给应该解密条形码中信息的任何人。密码你想在这里工作。让我们假设要加密的字节在byte[] input;接下来,你需要钥匙初始化向量字节byte[] keyBytes;byte[] ivBytes;现在,您可以为您选择的算法初始化密码:// wrap key data in Key/IV specs to pass to cipherSecretKeySpec key = new SecretKeySpec(keyBytes, "DES"); IvParameterSpec ivSpec = new IvParameterSpec(ivBytes);// create the cipher with the algorithm you choose // see javadoc for Cipher class for more info, e.g.Cipher cipher = Cipher.getInstance("DES/CBC/PKCS5Padding");加密应该是这样的:cipher.init(Cipher.ENCRYPT_MODE, key, ivSpec);byte[] encrypted= new byte[cipher.getOutputSize(input.length)]; int enc_len = cipher.update(input, 0, input.length, encrypted, 0);enc_len += cipher.doFinal(encrypted, enc_len);解密如下:cipher.init(Cipher.DECRYPT_MODE, key, ivSpec);byte[] decrypted = new byte[cipher.getOutputSize(enc_len)]; int dec_len = cipher.update(encrypted, 0, enc_len, decrypted, 0);dec_len += cipher.doFinal(decrypted, dec_len);

陪伴而非守候

我正在使用Sun的Base 64编码器/解码器,它将在Sun的JRE中找到,以避免lib中的另一个JAR。从使用OpenJDK或其他JRE的角度来看,这是很危险的。除此之外,我还应该考虑在编码器/解码器中使用ApacheCommonslib吗?public&nbsp;class&nbsp;EncryptUtils&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;final&nbsp;String&nbsp;DEFAULT_ENCODING&nbsp;=&nbsp;"UTF-8";&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;BASE64Encoder&nbsp;enc&nbsp;=&nbsp;new&nbsp;BASE64Encoder(); &nbsp;&nbsp;&nbsp;&nbsp;static&nbsp;BASE64Decoder&nbsp;dec&nbsp;=&nbsp;new&nbsp;BASE64Decoder(); &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;base64encode(String&nbsp;text)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;enc.encode(text.getBytes(DEFAULT_ENCODING)); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(UnsupportedEncodingException&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}//base64encode &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;base64decode(String&nbsp;text)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;String(dec.decodeBuffer(text),&nbsp;DEFAULT_ENCODING); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(IOException&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}//base64decode &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;void&nbsp;main(String[]&nbsp;args)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;txt&nbsp;=&nbsp;"some&nbsp;text&nbsp;to&nbsp;be&nbsp;encrypted"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;key&nbsp;=&nbsp;"key&nbsp;phrase&nbsp;used&nbsp;for&nbsp;XOR-ing"; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println(txt&nbsp;+&nbsp;"&nbsp;XOR-ed&nbsp;to:&nbsp;"&nbsp;+&nbsp;(txt&nbsp;=&nbsp;xorMessage(txt,&nbsp;key))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;String&nbsp;encoded&nbsp;=&nbsp;base64encode(txt);&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.println("&nbsp;is&nbsp;encoded&nbsp;to:&nbsp;"&nbsp;+&nbsp;encoded&nbsp;+&nbsp;"&nbsp;and&nbsp;that&nbsp;is&nbsp;decoding&nbsp;to:&nbsp;"&nbsp;+&nbsp;(txt&nbsp;=&nbsp;base64decode(encoded))); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;System.out.print("XOR-ing&nbsp;back&nbsp;to&nbsp;original:&nbsp;"&nbsp;+&nbsp;xorMessage(txt,&nbsp;key)); &nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;public&nbsp;static&nbsp;String&nbsp;xorMessage(String&nbsp;message,&nbsp;String&nbsp;key)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;try&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;if&nbsp;(message&nbsp;==&nbsp;null&nbsp;||&nbsp;key&nbsp;==&nbsp;null)&nbsp;return&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;keys&nbsp;=&nbsp;key.toCharArray(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;mesg&nbsp;=&nbsp;message.toCharArray(); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;ml&nbsp;=&nbsp;mesg.length; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;int&nbsp;kl&nbsp;=&nbsp;keys.length; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;char[]&nbsp;newmsg&nbsp;=&nbsp;new&nbsp;char[ml]; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;for&nbsp;(int&nbsp;i&nbsp;=&nbsp;0;&nbsp;i&nbsp;<&nbsp;ml;&nbsp;i++)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;newmsg[i]&nbsp;=&nbsp;(char)(mesg[i]&nbsp;^&nbsp;keys[i&nbsp;%&nbsp;kl]); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}//for&nbsp;i &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;new&nbsp;String(newmsg); &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;}&nbsp;catch&nbsp;(Exception&nbsp;e)&nbsp;{ &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return&nbsp;null; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;&nbsp;&nbsp;}//xorMessage}//class
随时随地看视频慕课网APP

相关分类

Java
我要回答