mohamadng
پنج شنبه 31 شهریور 1390, 10:54 صبح
با سلام
کد زیر مربوط به پروژه بنده در مورد انتقال پیام کوتاه رمز نگاری شده است. این نرم افزار را برای گوشیهای سونی اریکسون پلت فورم جاوا مانند k750 , k530 طراحی می شود.
public String encryption(String msg) throws Exception {
String cipherText="";
BigInteger dataBI;
String s1=new String();
RSACipherTextPair ctp;
byte[]msgByte=msg.getBytes("UTF-8");
int q=modulusLength-1;
int index=0,size=msgByte.length;
while(size-index>=q){
byte b[]=new byte[q];
System.arraycopy(msgByte, index, b, 0, b.length);
index+=q;
dataBI=new BigInteger(1,b);
ctp=RSACryptoAlgorithm.RSAep(pubKey,dataBI);
cipherText+=ctp.getCipherText().toString();
cipherText+=" ";
}
if(size-index>0){
byte b2[]=new byte[size-index];
System.arraycopy(msgByte, index, b2, 0, b2.length);
index+=q;
dataBI=new BigInteger(1, b2);
ctp=RSACryptoAlgorithm.RSAep(pubKey,dataBI);
cipherText+=ctp.getCipherText().toString();
cipherText+=" ";
}
cipherText=cipherText.substring(0, cipherText.length()-1);
return cipherText;
}
public String decryption(String ss) throws Exception{
String str ="";
String s;
byte[]b = null;
BigInteger delta , cipherBI;
boolean bool=true;
int index=0;
while(bool){
s=getsubString(ss, index);
if(s.length()==0)
break;
delta=new BigInteger(s);
cipherBI=RSACryptoAlgorithm.RSAdp(privKey,new RSACipherTextPair(delta));
byte[]cipherbyte=cipherBI.toByteArray();
b=mergeByteArray(b, cipherbyte);
index+=s.length()+1;
if(index>=ss.length())
bool=false;
}
String txt=new String(b,"UTF-8");
str+=txt;
return str;
}
private String getsubString(String s, int index){
int j;
boolean end=true;
for(j=index;j<s.length();j++){
if(!Character.isDigit(s.charAt(j))){
end=false;
break;
}
}
if(j==index)
return "";
if(end)
return s.substring(index, s.length());
return s.substring(index, j);
}
private byte[] mergeByteArray(byte[] b, byte[]bb){
if(b==null)
return bb;
if(b.length==0)
return bb;
byte [] merge=new byte[b.length+bb.length];
for(int i=0;i<merge.length;i++){
if(i<b.length)
merge[i]=b[i];
else
merge[i]=bb[i-b.length];
}
return merge;
}
این کد بر روی شبیه ساز گوشی های ذکر شده کار میکنه ولی وقتی که روی خود گوشی ها تست می کنم با فارسی مشکل داره.
مشکل اینه که در تابع encryption وقتی ارایه ای از بایت رو به string با فورمت utf-8 تبدیل میکنم روی گوشی کار نمی کنه( برای حروف لاتین مشکلی نداره!)
لطفا منو راهنمایی کنید
کدین پیش فرض گوشی ISO-8859-1 است که حروف فارسی رو علامت سوال نشون میده.
نوع رمز نگاری هم RSA است.
کد زیر مربوط به پروژه بنده در مورد انتقال پیام کوتاه رمز نگاری شده است. این نرم افزار را برای گوشیهای سونی اریکسون پلت فورم جاوا مانند k750 , k530 طراحی می شود.
public String encryption(String msg) throws Exception {
String cipherText="";
BigInteger dataBI;
String s1=new String();
RSACipherTextPair ctp;
byte[]msgByte=msg.getBytes("UTF-8");
int q=modulusLength-1;
int index=0,size=msgByte.length;
while(size-index>=q){
byte b[]=new byte[q];
System.arraycopy(msgByte, index, b, 0, b.length);
index+=q;
dataBI=new BigInteger(1,b);
ctp=RSACryptoAlgorithm.RSAep(pubKey,dataBI);
cipherText+=ctp.getCipherText().toString();
cipherText+=" ";
}
if(size-index>0){
byte b2[]=new byte[size-index];
System.arraycopy(msgByte, index, b2, 0, b2.length);
index+=q;
dataBI=new BigInteger(1, b2);
ctp=RSACryptoAlgorithm.RSAep(pubKey,dataBI);
cipherText+=ctp.getCipherText().toString();
cipherText+=" ";
}
cipherText=cipherText.substring(0, cipherText.length()-1);
return cipherText;
}
public String decryption(String ss) throws Exception{
String str ="";
String s;
byte[]b = null;
BigInteger delta , cipherBI;
boolean bool=true;
int index=0;
while(bool){
s=getsubString(ss, index);
if(s.length()==0)
break;
delta=new BigInteger(s);
cipherBI=RSACryptoAlgorithm.RSAdp(privKey,new RSACipherTextPair(delta));
byte[]cipherbyte=cipherBI.toByteArray();
b=mergeByteArray(b, cipherbyte);
index+=s.length()+1;
if(index>=ss.length())
bool=false;
}
String txt=new String(b,"UTF-8");
str+=txt;
return str;
}
private String getsubString(String s, int index){
int j;
boolean end=true;
for(j=index;j<s.length();j++){
if(!Character.isDigit(s.charAt(j))){
end=false;
break;
}
}
if(j==index)
return "";
if(end)
return s.substring(index, s.length());
return s.substring(index, j);
}
private byte[] mergeByteArray(byte[] b, byte[]bb){
if(b==null)
return bb;
if(b.length==0)
return bb;
byte [] merge=new byte[b.length+bb.length];
for(int i=0;i<merge.length;i++){
if(i<b.length)
merge[i]=b[i];
else
merge[i]=bb[i-b.length];
}
return merge;
}
این کد بر روی شبیه ساز گوشی های ذکر شده کار میکنه ولی وقتی که روی خود گوشی ها تست می کنم با فارسی مشکل داره.
مشکل اینه که در تابع encryption وقتی ارایه ای از بایت رو به string با فورمت utf-8 تبدیل میکنم روی گوشی کار نمی کنه( برای حروف لاتین مشکلی نداره!)
لطفا منو راهنمایی کنید
کدین پیش فرض گوشی ISO-8859-1 است که حروف فارسی رو علامت سوال نشون میده.
نوع رمز نگاری هم RSA است.