使用java对整数进行加密
我正在尝试使用 java.security 和 javax.crypto 加密 java 中的一些整数。
问题似乎是 Cipher 类仅加密字节数组。 我无法直接将整数转换为字节字符串(或者可以吗?)。 做这个的最好方式是什么?
我应该将整数转换为字符串并将字符串转换为 byte[] 吗? 这看起来效率太低了。
有谁知道快速/简单或有效的方法吗?
请告诉我。
提前致谢。
吉布
I'm trying to encrypt some integers in java using java.security and javax.crypto.
The problem seems to be that the Cipher class only encrypts byte arrays. I can't directly convert an integer to a byte string (or can I?). What is the best way to do this?
Should I convert the integer to a string and the string to byte[]? This seems too inefficient.
Does anyone know a quick/easy or efficient way to do it?
Please let me know.
Thanks in advance.
jbu
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(7)
您可以使用 DataOutputStream 将整数转换为 byte[],如下所示:
然后稍后解密:
You can turn ints into a byte[] using a DataOutputStream, like this:
Then to decrypt it later:
您还可以使用 BigInteger 进行转换:
You can also use BigInteger for conversion:
就用蔚来吧。 它是为此特定目的而设计的。 ByteBuffer 和 IntBuffer 将快速、高效、优雅地满足您的需求。 它将处理大/小尾数转换、高性能 IO 的“直接”缓冲区,甚至可以将数据类型混合到字节缓冲区中。
将整数转换为字节:
将字节转换为整数:
Just use NIO. It's designed for this specific purpose. ByteBuffer and IntBuffer will do what you need quickly, efficiently, and elegantly. It'll handle big/little endian conversion, "direct" buffers for high performance IO, and you can even mix data types into the byte buffer.
Convert integers into bytes:
Convert bytes into integers:
我发现下面的代码可能对你有帮助,因为 Java 中的 Integer 总是 4 个字节长。
您可以在此处找到有关 bigEndian 参数的更多信息:
http://en.wikipedia.org/wiki/Endianness
I have found the following code that may help you, since Integer in Java is always 4 bytes long.
You can find more information about the bigEndian parameter here:
http://en.wikipedia.org/wiki/Endianness
创建一个 4 字节数组,并通过按位 AND 和位移位分 4 步将 int 复制到该数组,就像 Paulo 所说的那样。
但请记住,AES 和 DES 等块算法适用于 8 或 16 字节块,因此您需要将数组填充到算法所需的值。 也许将 8 字节数组的前 4 个字节保留为 0,其他 4 个字节包含整数。
create a 4-byte array and copy the int to the array in 4 steps, with bitwise ANDs and bitshifting, like Paulo said.
But remember that block algorithms such as AES and DES work with 8 or 16 byte blocks so you will need to pad the array to what the algorithm needs. Maybe leave the first 4 bytes of an 8-byte array as 0's, and the other 4 bytes contain the integer.
只需使用:
确保使用原始 int 并且 getBytes() 将返回一个字节数组。 不需要做任何其他复杂的事情。
要转换回来:
Just use:
Make sure you use your original int and getBytes() will return a byte array. No need to do anything else complicated.
To convert back:
我的简单解决方案是通过将整数的 ASCII 值按您提供的密钥进行移位,将整数加密为字符串。
解决方案如下:
编码步骤:
String temp = GiveInt + ""
Integer
转换为Character 并连接到String encryptNum
最后返回它。解码步骤:
decodeText
连接。由于之前的编码输出始终为
String '???'
,并根据输入Id
的位数而变化。My Simple Solution is that Encrypt Integer to the String by shifting ASCII Value of the Integer by the secret key you Provide.
Here is the Solution:
Steps to Encode:
String temp = givenInt + ""
Integer
into Character and concatenate to theString encryptNum
and finally return it.Steps to Decode:
decodeText
.As previous encode output is always
String '???'
and vary according to number of digits of inputId
.