首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对Android和Java中不同值的字符串进行加密/解密

对Android和Java中不同值的字符串进行加密/解密
EN

Stack Overflow用户
提问于 2012-03-16 05:34:02
回答 3查看 4.1K关注 0票数 2

我使用这段代码在Java和Android中加密和解密一些字符串,在每个系统中我都会得到一个不同的值。

我使用的代码来自http://www.androidsnippets.com/encryptdecrypt-strings (我不会粘贴它,因为它太大了)。

例如,在Android中,为了加密"aa“,我得到了这个: 1C6BD31C57F42ACFD0EDD2DD5B7A92CA

与Java中的seed的密钥完全相同的字符串: 61FAD1203B7AC92AD9345771AA273DA5

有什么想法吗?

提前感谢!

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-03-16 06:50:20

这只是我的猜测,但我认为原因是您的密钥派生。不过,我并不是一个真正的Java开发人员,所以我可能无法正确理解代码。

当您加密和解密时,此代码始终调用getRawKey()。getRawKey()看起来像是接受了他们称之为种子或共享秘密的东西,并使用它来计算一个新的随机密钥来执行实际的加密/解密。

代码语言:javascript
复制
SecureRandom sr = SecureRandom.getInstance("SHA1PRNG");
    sr.setSeed(seed);
    kgen.init(128, sr); // 192 and 256 bits may not be available
    SecretKey skey = kgen.generateKey();

根据Java发现的here,setSeed()“重新播种这个随机对象。给定的种子补充物,而不是替换现有的种子。”

我的猜测是,RNG的初始状态在每个系统/平台上是不同的,因此它会给出不同的结果。您应该将密钥派生修复为更标准和一致的方式,或者使用已经建立的加密系统,如Bouncy Castle库中的PGP。

票数 5
EN

Stack Overflow用户

发布于 2012-12-01 13:48:53

这个例子将演示如何加密和解密一个字符串,为此,我们需要一个shif密钥,它会将一个字符转移到另一个字符,例如,如果你有'b‘并使用shift key=2,那么它将变成98+2=100 ='d’,再一次100-2=98是'b',所以这将以这种方式执行。

让你的字符串在这里加密!

代码语言:javascript
复制
final int shift_key = 4; //it is the shift key to move charcter, like if i have 'a' then a=97+4=101 which =e and thus it changes
    String plainText = "piran jhandukhel"; 
    char character; 
     char ch[]=new char[plainText.length()];//for storing encrypt char
   for (int iteration = 0; iteration < plainText.length(); iteration++)
            {
                    character = plainText.charAt(iteration); //get characters
                    character = (char) (character + shift_key); //perform shift
              }     ch[iteration]=character;//assign char to char array
     String encryptstr = String.valueOf(ch);//converting char array to string
     Toast.makeText(this, "Encrypt string is "+ encryptstr Toast.LENGTH_LONG).show();

让你的字符串在这里解密!

代码语言:javascript
复制
   for(int i=0;i<encryptstr.length();i++)
     {
        character=str.charAt(i);
        character = (char) (character -shift_key); //perform shift
            ch[i]=character;
     }
 Stirng decryptstr = String.valueOf(ch);
     Toast.makeText(this, "Decrypted String is "+decryptstr, Toast.LENGTH_LONG).show();
票数 1
EN

Stack Overflow用户

发布于 2012-03-16 06:31:24

看起来每次你加密它的时候都会有不同的输出。这很正常。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9728538

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档